2016-07-04 33 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