CSV Line Breaks

本文关键字:Breaks Line CSV | 更新日期: 2023-09-27 18:34:30

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

即:

value 1, value 2, value 3
       , value 1, value 2, value 3
       , value 1, value 2, value 3
       , value 1, value 2, value 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++;
}

CSV Line Breaks

如果您只是建立一个列表,而不是扁平化的单个值列表,那会容易得多。 例如,由于您在使用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);