【问题标题】:write back to first line of csv in c#在c#中写回csv的第一行
【发布时间】:2016-04-06 14:19:28
【问题描述】:

所以我想在 3 列中将一些值写入 csv 文件,如下所示:

number of series      firstVal       secondVal
10                    23             33
50                    55             66
100                   98             102

我将所有 myvalues 存储在字典中

var timeResults = new Dictionary<string, Dictionary<string, double>>();

而我的代码是这样的:

 foreach (var resultSet in timeResults)
     {
     var csv = new StringBuilder();

     csv.AppendLine(String.Format("Number of TimeSeries;{0}", n));
     foreach (var result in resultSet.Value)
       {

       csv.AppendLine(String.Format("{0}.{1} (ms);{2}", resultSet.Key, result.Key, result.Value));

       }

     File.AppendAllText(@"D:/CSV/Results_" + resultSet.Key + ".csv", csv.ToString());

}

但我得到的是这样的:

Number of TimeSeries        10
add.firstVal(ms)            74
add.secondVal (ms)          12
Number of TimeSeries        50
add.firstVal (ms)           4
add.secondVal(ms)           3
Number of TimeSeries        100
add.firstVal (ms)           6
add.secondVal (ms)          6

我要做的就是告诉它转到第一行但下一列并再次写入。所以所有的值都会在一列中。怎么可能?

【问题讨论】:

  • 使用DataTable之类的东西,在那里处理并替换你的csv文本。无需弄乱文本文件。

标签: c# csv export-to-csv


【解决方案1】:

编写和读取 CVS 文件本身并不是一项简单的任务。最好使用 CsvHelperA Fast CSV Reader 之类的库

此外,字典不保证您获取记录的顺序。这对你来说可能是个问题。考虑改用 List 或按某些标准对记录进行排序。

所以,你的代码可能是这样的

        stream = new MemoryStream();
        writer = new StreamWriter(stream);
        csvWriter = new CsvWriter(writer);            
        csvWriter.Configuration.QuoteAllFields = false;
        csvWriter.Configuration.HasHeaderRecord = true;
        csvWriter.WriteField("Number of TimeSeries");
        csvWriter.WriteField("add.firstVal(ms)");
        csvWriter.WriteField("add.secondVal (ms)");
        csvWriter.NextRecord();
        foreach (var resultSet in timeResults)
        {
           csvWriter.WriteField(resultSet.Key);
           foreach (var result in resultSet.Value)
           {

              csvWriter.WriteField(result.Key);
              csvWriter.WriteField(result.Value));  
           }    
           csvWriter.NextRecord();
         }
        writer.Flush();
       // do what you need with the data in the stream.
       // dispose objects.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-20
    • 2014-01-14
    • 2023-03-13
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 2015-05-15
    • 2020-02-29
    相关资源
    最近更新 更多