在 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.
所以我想将一些值写入 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.