0

txtファイルの配列の次元を知るためにコードを変更する必要があります.2 * 2、3 * 3などの2次元配列の次元しか取得できないという私のコードの問題ですが、たとえば3 * 1が必要です

static double[,] ParseNumberFile(string filename)
{
    // read data from txt file 

    string fileContent = File.ReadAllText(filename);

    // first put all lines into an string array
    string[] allLines = fileContent.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

    // calculate 2D array's dimension lengths, and initialize the 2Darray

    int rowCount = allLines.Length;
    int columnCount = allLines.Length;

    int i = 0, j = 0;
    double[,] result = new double[rowCount, columnCount];
    foreach (var row in fileContent.Split(new char[] { '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries))
    {
        j = 0;
        foreach (var col in row.Trim().Split(' '))
        {
            result[i, j] = double.Parse(col.Trim(), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo);
            j++;
        }
        i++;
    }
    return result;
}
4

2 に答える 2

1

ジェネリック リストを使用できます。

List<List<double>> result = new List<List<double>>();
foreach (var row in fileContent.Split(new char[] { '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries))
{
    List<double> list = new List<double>()
    foreach (var col in row.Trim().Split(' '))
    {
        list.Add(double.Parse(col.Trim(), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo));
    }
    result.Add(list);
}
于 2013-04-30T11:49:04.023 に答える
1

Linq の方法:

        double[][] doubles = File.ReadAllLines("foo.txt").
                                  Where(line => !string.IsNullOrWhiteSpace(line)).
                                  Select(line => line.Split(' ').Select(double.Parse).ToArray()).
                                  ToArray();

多くのコードを節約できます ;)

于 2013-04-30T11:56:18.287 に答える