在 C# 中写回 csv 的第一行

write back to first line of csv in c#

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

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

我将所有值存储在字典中

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

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

编写和读取 CVS 文件本身并不是一项简单的任务。最好使用 CsvHelper and A 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.