给定这段代码:
using (StreamWriter sw = File.CreateText(file))
{
for (int r = 0; r < originalDataTable.Rows.Count; r++)
{
for (int c = 0; c < originalDataTable.Columns.Count; c++)
{
var rowValueAtColumn = originalDataTable.Rows[r][c].ToString();
var valueToWrite = string.Format(@"{0}{1}", rowValueAtColumn, "\t");
if (c != originalDataTable.Columns.Count)
sw.Write(valueToWrite);
else
sw.Write(valueToWrite + @"\n");
}
}
}
我正在尝试一次一行地将 DataRow 写回文件;但是,它正在创建的文件正在创建一个连续语句,其中写入文件的所有数据都在一行中。应该有 590 条单独的线,而不仅仅是一条。
我需要在上面的代码中添加什么,才能像数据表中那样断开我的行?我的代码似乎无法正常工作。
最佳答案
sw.Write(valueToWrite + @"\n");
是错误的。因为 @
它没有输入换行符,所以您正在编写字符 \
然后是字符 n
。
您想执行 sw.Write(valueToWrite + "\n");
或让程序通过执行 sw.WriteLine(valueToWrite)
,但是这将输入 Environment.NewLine在 Windows 上是 \r\n
。
但是,您可以通过在循环列的外部插入行分隔符来使您的代码更加简单。我还在循环顶部定义了两个分隔符,以防您想要更改它们(当您点击一些具有 \t
或\n
在文本本身?),以及其他一些小调整以使代码更易于阅读。
string colSeperator = "\t";
string rowSeperator = "\n";
using (StreamWriter sw = File.CreateText(file))
{
for (int r = 0; r < originalDataTable.Rows.Count; r++)
{
for (int c = 0; c < originalDataTable.Columns.Count; c++)
{
sw.Write(originalDataTable.Rows[r][c])
sw.Write(colSeperator);
}
sw.Write(rowSeperator);
}
}
这是另一个简化,只是为了展示其他方法(现在您不需要检查 originalDataTable.Columns.Count
)
string colSeperator = "\t";
string rowSeperator = "\n";
using (StreamWriter sw = File.CreateText(file))
{
foreach (DataRow row in originalDataTable.Rows)
{
foreach (object value in row.ItemArray))
{
sw.Write(value)
sw.Write(colSeperator);
}
sw.Write(rowSeperator);
}
}
关于c# - 从 DataTable 写入行正在创建连续写入 : how do I preserve each line as it is written?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16068233/