我正在使用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();
}
}
}
所以,也许你们可以解释一下我的代码出了什么问题,以及如何正确地读取文本文件?谢谢
您的第二个循环将越界,因为您的循环超过了行的长度(以字符为单位),而不是网格[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();
}
}
}
下面的代码不够用吗?它更短,可以防止在转换为数组之前将整个文件复制到内存中。
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(',')
看起来很可疑。我在你的例子中看不到','
。请改用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++;