2016-04-06 5 views
-1

so möchte ich in drei Spalten einige Werte in eine CSV-Datei schreiben, wie folgt:schreiben zurück zur ersten Zeile der CSV in C#

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

I speichert alle MyValues ​​in einem Wörterbuch

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

und die mycode ist wie folgt:

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()); 

} 

aber was ich bekommen, ist so etwas wie dieses:

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 

Alles, was ich tun möchte, ist es zu sagen, in die erste Zeile, aber nächste Spalte zu gehen und wieder zu schreiben. also wären alle Werte in einer Spalte. wie ist es möglich?

+0

Gebrauch sein wie 'DataTable', Prozess gibt es und Ihre CSV-Text ersetzen. Keine Notwendigkeit, sich mit einer Textdatei zu beschäftigen. – C4u

Antwort

1

Schreiben und Lesen von CVS-Dateien ist keine einfache Aufgabe. Es ist besser, eine Bibliothek wie CsvHelper und A Fast CSV Reader

zu verwenden. Auch garantiert das Wörterbuch nicht die Reihenfolge, in der Sie Datensätze erhalten. Es könnte ein Problem für dich sein. Erwägen Sie stattdessen die Verwendung von List oder sortieren Sie Datensätze nach bestimmten Kriterien.

So könnten Sie Code wie diesen etwas

 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.