2017-04-04 12 views
0

LINQクエリと戻り値型に関する質問があります。 .csvファイルから値を読み取る場合は、次のようにセミコロンで区切られた二重の値があります。.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> []を暗黙的に変換して[]'にすることはできません。デバッグは、私はすでに何が私にまさに私にヒントを与えることができる、私はまだ何かを見つけることができませんでした

...配列として(何とか)の値変数は、ファイルからのすべての値を保持していることがわかります

ここで間違っています。誰か助けてくれますか?

ありがとうございます!

+1

[OK]をあなたは値の変数が配列としてファイル(何とか)からのすべての値を保持していると述べた..あなたはa.Splitを(「;」)とcosを誤る..ので、今その文字列の配列... – BugFinder

+0

'File.ReadLines'の代わりに' File.ReadLines'を使うと、 'File.ReadLines'はデータをメモリにフルロードするのではなくストリームするので、もっと便利です。 –

+2

ファイルに複数の行が含まれていますか?だから、二重になるでしょう。結果として何が必要ですか? '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); 
関連する問題