2017-04-04 158 views
0

我有一个关于LINQ查询和返回类型的问题。我只想读取.csv文件中的值,其中有像这样用分号分隔的double值:从.csv文件读取到双数组

0,016; 0,010; -0,020; -0,014; 0,020; 0,016; -0,019; -0,014; 0,023;

从文件读取正常工作与下面的语句:

 double pdValue; 
     double[] pdValues; 

     var values = File.ReadAllLines(path) 
      .Select(a => a.Split(';') 
      .Select(str => double.TryParse(str, out pdValue) ? pdValue : 0)); 

     pdValues = values.ToArray(); 

但最后一行返回“无法隐式转换System.Collections.Generic.IENumerable <双>翻番[]”的错误。试图让它与数组一起工作将错误更改为'不能隐式转换System.Collections.Generic.IENumerable < double> []为double []'。

调试时,我已经可以看到变量值从文件(在某种程度上)作为数组保存的所有值...

我无法找到任何东西,有什么可以给我一个提示正是我我在这里做错了。有谁能够帮助我?

在此先感谢!

+1

好吧你说的变量值从文件(在某种程度上)作为数组保存的所有值..犯错,因为你说a.Split(“;”)..所以现在它一个字符串数组... – BugFinder

+0

使用File.ReadLines而不是File.ReadAllLines更加有用,因为File.ReadLines流式传输数据而不是将其全部加载到内存中。 –

+2

该文件包含多行?所以这将是一个'double [] []'你需要什么结果? 'double [] []'或'double []'_(所有行合并)_ –

回答

2

看看values变量类型,它是IEnumerable<IEnumerable<double>>。您应使用此代码:

var values = File.ReadAllLines(path) 
      .SelectMany(a => a.Split(';') 
      .Select(str => double.TryParse(str, out pdValue) ? pdValue : 0)); 

pdValues = values.ToArray(); 
+0

非常感谢.SelectMany语句修复了它! – mrpip

0

ReadAllLine方法将返回一个字符串数组(比方说阵列A)。您使用的Split方法将为您提供一个由“;”分隔的字符串数组对于数组A的每一项。所以最终结果将是一个数组数组。这是错误的原因。

你可以试试:

var values = File.ReadAllLines(path).ToString() 
      .Split(';').Select(str => double.TryParse(str, out pdValue) ? pdValue : 0);