6

スペースで区切られたデータファイルがある場合、

10 10 10 10 222 331 
2 3 3 4 45
4 2 2 4

このファイルを読み取って配列にロードする方法

ありがとうございました

4

4 に答える 4

14
var fileContent = File.ReadAllText(fileName);
var array = fileContent.Split((string[])null, StringSplitOptions.RemoveEmptyEntries);

数値のみがあり、結果としてintのリストが必要な場合は、次のように実行できます。

var numbers = array.Select(arg => int.Parse(arg)).ToList();
于 2011-05-20T00:03:42.273 に答える
6

必要な配列の種類によって異なります。すべてを1次元配列にフラット化する場合は、Alex Azaの回答を使用してください。それ以外の場合は、テキストファイル内の行と要素にマップする2次元配列が必要です。

var array = File.ReadAllLines(filename)
                .Select(line => line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
                .Where(line => !string.IsNullOrWhiteSpace(line)) // Use this to filter blank lines.
                .Select(int.Parse) // Assuming you want an int array.
                .ToArray();

エラー処理がないことに注意してください。したがって、解析が失敗した場合、上記のコードは例外をスローします。

于 2011-05-20T00:43:29.187 に答える
1

あなたは興味がStreamReader.ReadLine()あり、String.Split()

于 2011-05-20T00:04:27.950 に答える
0

クイックジョースミスの答えがうまくいかなかったので、修正しました。変更したコードを「FileReader」クラス内の静的メソッドに入れました。

public static double[][] readWhitespaceDelimitedDoubles(string[] input)
{
    double[][] array = input.Where(line => !String.IsNullOrWhiteSpace(line)) // Use this to filter blank lines.
        .Select(line => line.Split((string[])null, StringSplitOptions.RemoveEmptyEntries))
        .Select(line => line.Select(element => double.Parse(element)))
        .Select(line => line.ToArray())
        .ToArray();

        return array;
}

私のアプリケーションでは、intではなくdoubleを解析していました。コードを呼び出すには、次のようなものを使用してみてください。

string[] fileContents = System.IO.File.ReadAllLines(openFileDialog1.FileName);
double[][] fileContentsArray = FileReader.readWhitespaceDelimitedDoubles(fileContents);

Console.WriteLine("Number of Rows:      {0,3}", fileContentsArray.Length);
Console.WriteLine("Number of Cols:      {0,3}", fileContentsArray[0].Length);
于 2014-04-01T17:58:46.347 に答える