在C#中从文件读取2D矩阵到2D int数组

时间:2017-03-29 14:42:19

标签: c# arrays matrix int

我在从文件中读取2D文本时遇到问题,并将其导入 int 数组。具体来说,我的文本文件如下所示:

2,3,4,5,6-

5,2,3,4,5

2,4,6,7,4

2,7,8,5,6

因此,矩阵中的每个单元格都用逗号分隔,每个新行都以新行开头。

我尝试了许多方法让它有效,但我无法做到!简单来说,我最后想要一个int[][]int[,]数组。

P.S:我可以简单地将1-D矩阵读到int[],如下所示:

int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray();

5 个答案:

答案 0 :(得分:1)

// Read the text file
var text = File.ReadAllLines(@"path\to\file.txt");

// Split on `,`, convert to int32, add to array, add to outer array
var result = text.Select(x => (x.Split(',').Select(Int32.Parse).ToArray())).ToArray();

结果为int[][]

答案 1 :(得分:1)

试试这个:

String input = File.ReadAllText( @"c:\myfile.txt" );

int i = 0, j = 0;
int[,] res = new int[10, 10];
foreach (var row in input.Split('\n'))
{
   j = 0;
   foreach (var col in row.Trim().Split(' '))
   {
       res[i, j] = int.Parse(col.Trim());
       j++;
   }
   i++;
}

如果该工作有效,您还可以选择:

int[][] list = File.ReadAllLines("myfile.txt")
               .Select(l => l.Split(',').Select(i => int.Parse(i)).ToArray())
               .ToArray();

答案 2 :(得分:1)

您首先需要将每行的索引添加到第一维,然后将每行的第#列添加到第二维的行中。

请尝试以下代码:

int[][] array = File.ReadAllText(filepath).Split('\n')
                .Select(r => (r.Split(','))
                .Select(c => int.Parse(c)).ToArray()).ToArray();

答案 3 :(得分:0)

您正在阅读所有行,但代码只处理一行。如果你想要制作一个2D整数数组,你需要这样的东西:

string text = @“2,3,4,5,6 5,2,3,4,5 2,4,6,7,4" ;

text.Split('\ n')。选择(line => line.Split(',')。选择(t => int.Parse(t))。ToArray())。ToArray() ;

(出于测试目的,我用静态字符串替换了读取的文件)

答案 4 :(得分:0)

只是为了说明问题,你所拥有的是将每行的引用存储到一个锯齿状数组int [] []或二维数组int [,]

我建议你在https://msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx?f=255&MSPPError=-2147217396

之前看看这里

如果要创建锯齿状数组很简单,第一个维度将是您文件中的行数。请记住,这个锯齿状数组在每个位置都有数组

int[][] a = new int[amountOfLinesTxt][];

因为你可以获得每行的数组,你唯一需要做的就是将数组分配给特定的位置,例如

int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray();
a[0] = array

其他行也一样。

现在,如果你想使用二维数组,你需要在你的情况下从乞讨中指定维度,例如int[,] a = new int[amountOfRowsTxt, amountofColumnsTxt];

然后在您阅读线条时,您需要将项目保存在其中。

int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray();

for(int i = 0; array.Length; i ++)
{
   a[currentRow, i] = array[i];
}

知道了吗?当然有更好的方法可以使用Linq获得结果,只需看看之前的答案。希望这有帮助