2016-07-04 51 views
2

我有一個的.csv文件有許多行3列(由「;」分隔)與數字,我轉換爲double array[][] 現在我已經加入到數字的多個列,並得到一個錯誤:C#csvfile數組

FormatException -> Input string was not in a correct format

我找不到什麼錯,因爲文件是相同的(但有2個列) 我的代碼:

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

編輯 感謝您與編輯的幫助 - 不是已經ry習慣了這裏的命令。希望我添加的文件正確 original improved

+2

檢查輸入數據。有些東西不能被解析爲雙重的東西 – Steve

+3

沒有看到原始文件和新文件是不可能的。 –

+0

您可能有空行或空數據(分號之間沒有數字),它們會給出例外。嘗試用一行代碼讀取整個文件並不是一個好主意。編寫更健壯的代碼。 – jdweng

回答

3

你的文件res1.csv(提供,它應該只包含double值)有一些語法錯誤,例如

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

01,06,1974是什麼意思?我們忽略逗號(對待他們,比如說,某種千位分隔符)?或者它是日期1 June 1974)?另一種可能性是,,推導器,所以我們必須獨立的值:161974

如果你想忽略逗號(因此01,06,1974會是1061974.0),只需指定InvariantCulture在解析:

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

如果你想TREA噸,作爲導出器(並且因此01,06,1974[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 it 首先將某些部分轉換爲excell - 看起來像5個元素被視爲日期\時間 thx現在可以工作了 – Leinad