3

鉴于此代码:

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 条单独的行,而不仅仅是一条。

我需要在上面的代码中添加什么,以便我的行在数据表中被分解?我的代码似乎不起作用。

4

2 回答 2

3

sw.Write(valueToWrite + @"\n");是错的。因为@它没有输入换行符,所以你写的是 character\然后是 character n

你想要做sw.Write(valueToWrite + "\n");或者让程序通过做为你放入一个新行sw.WriteLine(valueToWrite),但是这将进入Windows 上的Environment.NewLine \r\n


但是,您可以通过在 for 循环列之外插入行分隔符来使您的代码更加简单。我还在循环顶部定义了两个分隔符,以防您想更改它们(当您遇到一些在文本中包含 a\t或 a的数据时,您发送的程序会做什么?),以及\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);
    }
}
于 2013-04-17T19:18:53.040 回答
2

更改 sw.Write()sw.WriteLine()

http://msdn.microsoft.com/en-us/library/system.io.streamwriter.writeline.aspx

于 2013-04-17T19:13:20.503 回答