我编写此代码是为了以C#语言打开文本文件 文件中的每一行包含五个数字,例如
0 0 2 3 6
0 1 4 4 7
0 2 6 9 9
1 0 8 11 9
1 1 12 15 11
2 2 12 17 15
数字与另一个之间的距离是一个标签 问题是当您执行程序时出现此错误
输入字符串在Convert.ToInt32(t [j])
中的格式不正确
代码:
string[] st = File.ReadAllLines("C:\\testing\\result.txt");
int[,] tmp = new int[st.Length - 1, 5];
for (int i = 1; i < st.Length; i++)
{
string[] t = st[i].Split(new char[] { ' ' });
int cnt = 0;
for (int k = 0; k < t.Length; k++)
if (t[k] != "")
{ t[cnt] = t[k]; cnt++; }
for (int j = 0; j < 5; j++)
tmp[i - 1, j] = Convert.ToInt32(t[j]);
}
我该如何纠正?
答案 0 :(得分:8)
我建议将集合类型从 2d array int[,]
更改为锯齿一个int[][]
,然后使用 Linq :
using System.Linq;
...
int[][] data = File
.ReadLines(@"C:\testing\result.txt")
.Select(line => line
// Uncomment this if you have empty lines to filter out:
// .Where(line => !string.IsNullOrWhiteSpace(line))
.Split(new char[] {'\t'}, StringSplitOptions.RemoveEmptyEntries)
.Select(item => int.Parse(item))
.ToArray())
.ToArray();
答案 1 :(得分:1)
拆分char
应为标签字符 '\t'
,而不是单个空间
答案 2 :(得分:0)
每行有五个数字,但不一定是五个数字。您需要一个更复杂的解决方案,如下所示:
string[] st = File.ReadAllLines("C:\\testing\\result.txt");
int[,] tmp = new int[st.Length - 1, 5];
bool isAlreadyNumber = false;
bool isEmptyRow = true;
int rowIndex = -1;
int colIndex = -1;
for (int i = 0; i < st.Length; i++) {
isAlreadyNumber = false;
isEmptyRow = true;
foreach (char c in st[i]) {
if ((c >= '0') && (c <= '9')) {
if (isAlreadyNumber) {
tmp[rowIndex][colIndex] = tmp[rowIndex][colIndex] * 10 + (c - '0');
} else {
tmp[rowIndex][colIndex] = c - '0';
if (isEmptyRow) rowIndex++;
isEmptyRow = false;
isAlreadyNumber = true;
}
} else {
isAlreadyNumber = false;
}
}
}
请注意,索引是固定的。这个未经测试的代码也处理其他分隔符和空行,但仍假设有五个数字。