2016-07-04 11 views
2

Ich hatte eine CSV Datei mit vielen Zeilen und 3 Spalten (getrennt durch ‚;‘) mit den Zahlen, die ich double array[][] konvertieren Jetzt habe ich mehr Spalten von Zahlen hinzugefügt und erhalten Fehler:C# csvfile zu Array

FormatException -> Input string was not in a correct format

ich kann nicht finden, was ist falsch, weil Dateien identisch sind (aber mit 2 weiteren Spalten) Mein Code:

OpenFileDialog fD = new OpenFileDialog(); 
fD.Title = "select"; 
fD.Filter = "csv files|*.csv"; 
fD.InitialDirectory = @"path here"; 
if (fD.ShowDialog() == DialogResult.OK) 
    MessageBox.Show(fD.FileName.ToString()); 

double[][] termom = File.ReadLines(fD.FileName) 
    .Select(l => l.Split(';') 
     .Select(n => double.Parse(n)) 
     .ToArray()) 
    .ToArray(); 

bearbeiten Dank für die Hilfe bei Bearbeiten - nicht ve Ich habe hier Befehle gebraut. Hoffe, dass ich hinzugefügte Datei rechts original improved

+2

Überprüfen Sie die Eingabedaten. Etwas kann nicht zu einem doppelten geparst werden – Steve

+3

Es ist unmöglich zu helfen, ohne die ursprüngliche Datei und die neue Datei zu sehen. –

+0

Sie haben möglicherweise leere Zeilen oder Nulldaten (keine Zahlen zwischen den Semikola), die die Ausnahme geben. Es ist keine gute Idee, zu versuchen, die gesamte Datei mit einer Codezeile zu lesen. Schreibe Code, der robuster ist. – jdweng

Antwort

3

Ihre Datei res1.csv (vorausgesetzt, dass es nur double Werte enthalten sollte) hat einige Syntaxfehler, z.B.

1881081,9;6,315177;352,499964;01,06,1974;350,645

Was bedeutet 01,06,1974? Sollen wir ignorieren Kommas (behandeln sie als, sagen, eine Art von Tausende Separator)? Oder ist es ein Datum (1 June 1974)? Eine weitere Möglichkeit besteht darin, dass , ist ein deriver, so haben wir drei separate Werte: 1, 6 und 1974

Falls Sie wollen Kommata (und damit 01,06,1974 ignorieren sein 1.061.974,0), nur InvariantCulture angeben beim Parsen:

double[][] termom = File.ReadLines(fD.FileName) 
    .Select(l => l.Split(';') 
    .Select(n => double.Parse(n, CultureInfo.InvariantCulture)) 
    .ToArray()) 
    .ToArray(); 

Wenn Sie Trea wollen t , als deriver (und damit 01,06,1974 wird [1,0, 6,0, 1974,0])

double[][] termom = File.ReadLines(fD.FileName) 
    .Select(l => l.Split(';', ',') // ',' is a deriver as well as ';' 
    .Select(n => double.Parse(n, CultureInfo.InvariantCulture)) 
    .ToArray()) 
    .ToArray(); 
+0

dang es konvertiert einige Teile in Excel zuerst - scheint wie 5 Elemente wurden als Datum \ Zeit behandelt thx es funktioniert jetzt – Leinad