我和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();
}
}
}
那么,也许你们可以解释我的代码有什么问题,以及如何正确阅读文本文件?感谢。
答案 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++;