如何不将重复值写入csv文件

时间:2018-03-01 16:04:42

标签: c#

我正在尝试找到一种更好的方法来将数据写入csv文件。现在,每次循环迭代都会将标题和数据附加到文件中,如下所示

enter image description here

我想修改我的逻辑,以便我只得到像这样的数据。

enter image description here

有关我可以改变的任何提示都非常感谢。感谢

......
var csvContent = new StringBuilder();
csvContent.AppendLine("ONE, TWO, THREE);
var csvPath = defaultFilePath + "file7.csv";
foreach (var i in values)
{
    fileData.DataOne = i["DataPointOne"].ToString();
    fileData.DataTwo = i["DataPointTwo"].ToString();
    fileData.DataThree = DateTime.Parse(i["DataPointThree"]);
    csvContent.AppendLine(fileData.DataOne + "," + fileData.DataTwo + "," + fileData.DataThree);
    File.AppendAllText(csvPath, csvContent.ToString());
}
......

2 个答案:

答案 0 :(得分:4)

您不断将行附加到csvContent,然后在每次迭代时将其全部写入文件。摆脱StringBuilder(这里不需要)并使用StreamWriter这样:

using(var streamWriter = new StreamWriter("path\\toFile.csv")) 
{
    streamWriter.WriteLine("ONE, TWO, THREE");
    foreach (var i in values)
    {
        fileData.DataOne = i["DataPointOne"].ToString();
        fileData.DataTwo = i["DataPointTwo"].ToString();
        fileData.DataThree = DateTime.Parse(i["DataPointThree"]);
        streamWriter.WriteLine(fileData.DataOne + "," + fileData.DataTwo + "," + fileData.DataThree);
    }
}

答案 1 :(得分:0)

问题是,同一StringBuilder个内容会多次存储到文件中。

迭代1 csvContent包含第1行的数据 - >第1行存储到文件中。 文件包含第1行

迭代2 csvContent附加第2行 - >第1,2行附加存储到文件中。 文件包含第1行,第2行

迭代3 csvContent附加第3行 - >第1,2,3行再次附加到文件中。 文件包含第1,1,2,1,2,3行

简单修复应该是将文件存储在循环外部或使用例如StreamWriter在另一个答案中建议。