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