C#需要帮助将文本文件读取到2D或锯齿状数组

时间:2015-02-18 14:58:26

标签: c# arrays jagged-arrays

我和SMACOF algorythm一起工作并且遇到了一些问题。我正在尝试阅读包含以下元素的文本文件:

5.1 3.5 1.4 0.2 
4.9 3.0 1.4 0.2 
4.7 3.2 1.3 0.2 
4.6 3.1 1.5 0.2

这些元素的几百行在哪里。到目前为止,我已经设法阅读第一行,不知道为什么它不读取所有行。这是我的代码:

    static void Main(string[] args)
    {
        string[] lines = File.ReadAllLines("duom.txt");
        string[][] grid = new string[lines.Length][];
        for (int i = 0; i < lines.Length; i++)
        {
            grid[i] = lines[i].Split(',');
        }
        for (int i = 0; i < lines.Length; i++)
        {
            for (int j = 0; j < lines[i].Length; j++)
            {
                Console.WriteLine(grid[i][j]);
                Console.ReadLine();
            }
        }
    }

那么,也许你们可以解释我的代码有什么问题,以及如何正确阅读文本文件?感谢。

4 个答案:

答案 0 :(得分:2)

你的第二个循环将超出界限,因为你在行的长度(字符)中循环而不是grid [i]中数组的长度。

    static void Main(string[] args)
    {
        string[] lines = File.ReadAllLines("duom.txt");
        string[][] grid = new string[lines.Length][];
        for (int i = 0; i < lines.Length; i++)
        {
            grid[i] = lines[i].Split(',');
        }
        for (int i = 0; i < lines.Length; i++)
        {
            for (int j = 0; j < **grid**[i].Length; j++)
            {
                Console.WriteLine(grid[i][j]);
                Console.ReadLine();
            }
        }
    }

答案 1 :(得分:2)

下面的代码不会足够,它会缩短并防止在转换为数组之前将整个文件复制到内存中。

var grid  = File.ReadLines("duom.txt")
    .Select(line => line.Split(' ').Select(item => double.Parse).ToArray())
    .ToArray();

foreach(var item in grid.SelectMany(row => row))
{
    Console.WriteLine(item);
}

答案 2 :(得分:0)

也许我错过了一些东西,但这个Split(',')看起来很阴暗。我在你的例子中看不到','。请改为Split(' ')

答案 3 :(得分:0)

感谢大家的帮助,但我自己设法修复,这是解决方案:

int h = 0;
        int g = 0;
        string linijos = File.ReadAllText("duom.txt");
        double[][] nuskait = new double[150][];
        foreach (var row in linijos.Split('\n'))
        {
            h = 0;
            nuskait[g] = new double[4];
            foreach (var col in row.Trim().Split(' '))
            {
                nuskait[g][h] = double.Parse(col);
                h++;
            }
        }
        g++;