Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CSV换行符_C#_.net_Csv_Newline - Fatal编程技术网

C# CSV换行符

C# CSV换行符,c#,.net,csv,newline,C#,.net,Csv,Newline,我正在根据数据库值构建一个csv文件。当我在excel中打开csv时,所有内容都在一行上。为了解决这个问题,我在每行后面添加了\n或\r。现在,当我在excel中从第二行开始打开时,第一列的其余部分都有一个空值 即: 值1、值2、值3 ,值1,值2,值3 ,值1,值2,值3 ,值1,值2,值3 我可以在第一个值之前添加一个换行符或返回符,但是会有一个空的行和列。我怎样才能把它排好 我的代码: try { connection = new iDB2Connection(connectio

我正在根据数据库值构建一个csv文件。当我在excel中打开csv时,所有内容都在一行上。为了解决这个问题,我在每行后面添加了
\n
\r
。现在,当我在excel中从第二行开始打开时,第一列的其余部分都有一个空值

即:

值1、值2、值3
,值1,值2,值3
,值1,值2,值3
,值1,值2,值3
我可以在第一个值之前添加一个换行符或返回符,但是会有一个空的行和列。我怎样才能把它排好

我的代码:

try
{
    connection = new iDB2Connection(connectionString);
    connection.Open();
    command = new iDB2Command(commandString, connection);

    reader = command.ExecuteReader();
    var dt = new DataTable();
    dt.Load(reader);

    List<string> CsvList = new List<string>();

    foreach (DataRow row in dt.Rows)
    {
        foreach (var item in row.ItemArray)
        {
            CsvList.Add(item.ToString());
        }
        if (i == 1)
        {
            CsvList.Add(" ");
            CsvList.Add("Customer Service");
            CsvList.Add("Customer Service Representative" + "\r"); 
            // \r and \n not working
        }
    }

    System.IO.StreamWriter streamWriter;
    streamWriter = new System.IO.StreamWriter(fileName, true);

    string CsvString = string.Join(",", CsvList.ToArray());
    streamWriter.WriteLine(CsvString);
    streamWriter.Close();
    Console.WriteLine("File saved as " + fileName);

    i++;
}
试试看
{
连接=新的IDB2连接(connectionString);
connection.Open();
command=newIDB2command(commandString,connection);
reader=command.ExecuteReader();
var dt=新数据表();
dt.负载(读卡器);
List CsvList=新列表();
foreach(数据行中的数据行)
{
foreach(row.ItemArray中的var项)
{
CsvList.Add(item.ToString());
}
如果(i==1)
{
CsvList.添加(“”);
CsvList.Add(“客户服务”);
CsvList.Add(“客户服务代表”+“\r”);
//\r和\n不工作
}
}
System.IO.StreamWriter StreamWriter;
streamWriter=new System.IO.streamWriter(文件名,true);
string CsvString=string.Join(“,”,CsvList.ToArray());
streamWriter.WriteLine(CsvString);
streamWriter.Close();
Console.WriteLine(“文件另存为”+文件名);
i++;
}

如果你只是建立一个行列表,而不是一个单一值的扁平列表,那会容易得多。例如,由于在使用
Join
时已经将列表展平,因此在换行符值后添加逗号

而是将每行的值连接在一起,然后只跟踪整行:

foreach (DataRow row in dt.Rows)
{
    CsvList.Add(string.Join(",", row.ItemArray));
}
现在您已经有了行列表,我们可以使用
File.AppendAllLines
简单方便地将所有行写到文件末尾:

File.AppendAllLines(fileName, CsvList);
或者,如果您希望将结果流式传输到文件中,而不是将所有数据复制到列表中并同时保存在内存中,则可以执行以下操作:

var lines = dt.AsEnumerable()
    .Select(row => string.Join(",", row.ItemArray));
File.AppendAllLines(fileName, lines);

如果你只是建立一个行的列表,而不是一个单一值的扁平列表,这将是非常容易的。例如,由于在使用
Join
时已经将列表展平,因此在换行符值后添加逗号

而是将每行的值连接在一起,然后只跟踪整行:

foreach (DataRow row in dt.Rows)
{
    CsvList.Add(string.Join(",", row.ItemArray));
}
现在您已经有了行列表,我们可以使用
File.AppendAllLines
简单方便地将所有行写到文件末尾:

File.AppendAllLines(fileName, CsvList);
或者,如果您希望将结果流式传输到文件中,而不是将所有数据复制到列表中并同时保存在内存中,则可以执行以下操作:

var lines = dt.AsEnumerable()
    .Select(row => string.Join(",", row.ItemArray));
File.AppendAllLines(fileName, lines);

使用
StringBuilder
,一次提交一行,而不是自己创建数组和处理添加新行:

var sb = new StringBuilder();
foreach (DataRow row in dt.Rows)
{
    List<string> csvList = new List<string>();
    foreach (var item in row.ItemArray)
    {
        csvList.Add(item.ToString());
    }

    if (i == 1)
    {
        csvList.Add(" ");
        csvList.Add("Customer Service");
        csvList.Add("Customer Service Representative");
    }

    sb.WriteLine(string.Join(",", csvList));
}

System.IO.StreamWriter streamWriter;
streamWriter = new System.IO.StreamWriter(fileName, true);

streamWriter.WriteLine(sb.ToString());
streamWriter.Close();
Console.WriteLine("File saved as " + fileName);
var sb=new StringBuilder();
foreach(数据行中的数据行)
{
List csvList=新列表();
foreach(row.ItemArray中的var项)
{
csvList.Add(item.ToString());
}
如果(i==1)
{
csvList.添加(“”);
csvList.Add(“客户服务”);
csvList.Add(“客户服务代表”);
}
sb.WriteLine(string.Join(“,”,csvList));
}
System.IO.StreamWriter StreamWriter;
streamWriter=new System.IO.streamWriter(文件名,true);
streamWriter.WriteLine(sb.ToString());
streamWriter.Close();
Console.WriteLine(“文件另存为”+文件名);

不要自己创建数组和处理添加新行的操作,而是使用
StringBuilder
,一次提交一行:

var sb = new StringBuilder();
foreach (DataRow row in dt.Rows)
{
    List<string> csvList = new List<string>();
    foreach (var item in row.ItemArray)
    {
        csvList.Add(item.ToString());
    }

    if (i == 1)
    {
        csvList.Add(" ");
        csvList.Add("Customer Service");
        csvList.Add("Customer Service Representative");
    }

    sb.WriteLine(string.Join(",", csvList));
}

System.IO.StreamWriter streamWriter;
streamWriter = new System.IO.StreamWriter(fileName, true);

streamWriter.WriteLine(sb.ToString());
streamWriter.Close();
Console.WriteLine("File saved as " + fileName);
var sb=new StringBuilder();
foreach(数据行中的数据行)
{
List csvList=新列表();
foreach(row.ItemArray中的var项)
{
csvList.Add(item.ToString());
}
如果(i==1)
{
csvList.添加(“”);
csvList.Add(“客户服务”);
csvList.Add(“客户服务代表”);
}
sb.WriteLine(string.Join(“,”,csvList));
}
System.IO.StreamWriter StreamWriter;
streamWriter=new System.IO.streamWriter(文件名,true);
streamWriter.WriteLine(sb.ToString());
streamWriter.Close();
Console.WriteLine(“文件另存为”+文件名);

让你的生活更轻松,使用
字符串。加入
环境。换行符
@gunr2171他正在使用
加入
,只是不正确…让你的生活更轻松,使用
字符串。加入
环境。换行符
@gunr2171他正在使用
加入
,只是不正确…很好的快捷方式加入了
ItemArray
@ChrisMantle好吧,这是我自己写了好几次的代码。只需要找出如何添加一些硬编码的值。感谢您的帮助。@DouglasBubbletrousers您只需添加
.Concat(新[]{“a”,“b”})
即可
Concat
项目数组的一些值
.Concat(新[]{“a”,“b”})