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

C#需要帮助将文本文件读入2D或锯齿数组,c#,arrays,jagged-arrays,C#,Arrays,Jagged Arrays,我正在使用SMACOF算法,有一个小问题。我正在尝试读取包含如下元素的文本文件: 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"

我正在使用SMACOF算法,有一个小问题。我正在尝试读取包含如下元素的文本文件:

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();
            }
        }
    }
static void Main(字符串[]args)
{
string[]lines=File.ReadAllLines(“duom.txt”);
字符串[][]网格=新字符串[行.长度][];
对于(int i=0;i

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

您的第二个循环将超出范围,因为您的循环长度是行的长度(以字符为单位),而不是网格[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();
            }
        }
    }
static void Main(字符串[]args)
{
string[]lines=File.ReadAllLines(“duom.txt”);
字符串[][]网格=新字符串[行.长度][];
对于(int i=0;i
第二个循环将超出范围,因为循环的长度是行的长度(以字符为单位),而不是网格[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();
            }
        }
    }
static void Main(字符串[]args)
{
string[]lines=File.ReadAllLines(“duom.txt”);
字符串[][]网格=新字符串[行.长度][];
对于(int i=0;i
下面的代码不够用,因为它比较短,并且在转换为数组之前无法将整个文件复制到内存中

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);
}

下面的代码不够用,因为它比较短,并且在转换为数组之前无法将整个文件复制到内存中

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);
}

也许我遗漏了什么,但是这个
分割(',')
看起来很可疑。在您的示例中,我没有看到“
”,“
”。请尝试拆分(“”)

也许我遗漏了什么,但是这个
Split(',')
看起来很可疑。在您的示例中,我没有看到“
”,“
”。请尝试拆分(“”)

谢谢大家的帮助,但我自己设法解决了,以下是解决方案:

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++;

谢谢大家的帮助,但我自己设法解决了,以下是解决方案:

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++;

另外,@Jodrell solution看起来比loop好,@Jodrell solution看起来比loop好似乎您还可以删除
行上的第二个循环,并且只需在
网格[i]
赋值后直接使用
for
。似乎您还可以删除
行上的第二个循环,只需在
网格[i]
赋值后直接使用
for
。您的示例不包含任何逗号。您确定拆分的字符正确吗?您的示例不包含任何逗号。你确定你选对了角色吗?