1

有没有办法将数据导出到 CSV 文件中的特定列?我将数据导出到附加行,但需要指定要保存到哪些列。

我的保存代码是:

{
StreamWriter sw = File.AppendText("log.csv");                
            {

                    //need this in column 1
                    sw.WriteLine(TextBox21.Text + ",");
                    //need this in column 2
                    sw.WriteLine(TextBox41.Text + ",");

            }

            sw.Close();
4

5 回答 5

4

是的,像这样:

var columns = new string[10];

columns[5] = "hello";

sw.WriteLine( string.Join( ",", columns ));
于 2013-04-24T16:59:58.717 回答
3

创建 CSV 输出是一个已解决的问题,您不必创建自己的编写器。一旦您开始使用逗号、引号、换行符、其他编码等获取数据,诸如附加逗号之类的幼稚“解决方案”就会中断。

有许多工作的、调试的、记录的、高性能的 CSV 编写器可供您使用,例如FastCSVCSVHelper、 LINQ to CSV 等。我使用过 FastCSV,发现它使用简单、可靠且性能卓越。

于 2013-04-24T17:46:46.237 回答
1

您的代码的问题是您调用WriteLine了两次,这导致每个值在表中显示为一行。将它们放在同一行中的最少代码更改是将第WriteLine一个更改为Write. 而且,没有必要包含尾随逗号。

StreamWriter sw = File.AppendText("log.csv");                
{
    sw.Write(TextBox21.Text + ",");  // Column 1
    sw.WriteLine(TextBox41.Text);    // Column 2
}
sw.Close();

如果您需要将某些列留空(以跳到后面的列),那么只需输出额外的不带值的逗号。

于 2013-04-24T17:02:52.683 回答
1

只需将您的第一个更改.WriteLine().Write().

当您使用它时,您可能希望将这些文本字段括在引号中。如果有人在其中一个字段中添加逗号,它会在稍后关闭您的日志阅读器。

于 2013-04-24T17:03:47.193 回答
1

我将您的问题解释为“如何在现有的 csv 文件中更新/添加列”。

您可以将 oledb 驱动程序用于文本:

http://www.codeproject.com/Articles/27802/Using-OleDb-to-Import-Text-Files-tab-CSV-custom

如果 oledb 驱动程序不支持更新,您可能必须将文件作为数据表读取,更新数据表的列,然后将其重新导出为 csv(可能,我有时会惊讶于文本驱动程序支持多少)

于 2013-04-24T16:56:57.937 回答