2017-04-04 125 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);