将字符串从文本文件转换为整数数组

时间:2017-05-15 08:38:57

标签: c# file integer

我编写此代码是为了以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]);
 }

我该如何纠正?

3 个答案:

答案 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;
      }
   }
 }

请注意,索引是固定的。这个未经测试的代码也处理其他分隔符和空行,但仍假设有五个数字。