![](/img/trans.png)
[英]How can I read a 2d array/matrix from file in C#, which is seperated with tab keys
[英]Read 2D matrix from file to 2D int array in C#
我从文件中读取2D文本并将其导入到int数组时遇到问题。 具体来说,我的文本文件如下所示:
2,3,4,5,6
5,2,3,4,5
2,4,6,7,4
2,7,8,5,6
因此,矩阵中的每个单元格均以逗号分隔,每个新行均以新行开头。
我尝试了多种方法使其有效,但我做不到! 简而言之,我希望最后使用一个int[][]
或int[,]
数组。
PS:我可以简单地将一维矩阵读取为int[]
,如下所示:
int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray();
// 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[][]
。
尝试这个:
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();
您首先需要将每行的索引添加到第一维,然后将行中的每个“列”添加到第二维。
尝试以下代码:
int[][] array = File.ReadAllText(filepath).Split('\n')
.Select(r => (r.Split(','))
.Select(c => int.Parse(c)).ToArray()).ToArray();
您正在读取所有行,但是代码仅处理一行。 如果您要制作2D整数数组,则需要这样的内容:
字符串文本= @“ 2,3,4,5,6 5,2,3,4,5 2,4,6,7,4”;
text.Split('\\ n')。Select(line => line.Split(',')。Select(t => int.Parse(t))。ToArray())。ToArray();
(出于测试目的,我已用静态字符串替换了读取的文件)
只是为了说明问题,您正在将每行的引用存储到锯齿状数组int [] []或二维数组int [,]中
我建议您在https://msdn.microsoft.com/zh-cn/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获得结果。 希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.