2013-04-01 4 views
0

Я пытаюсь прочитать текстовый файл в 2d-массиве. Однако я получаю ошибкуСтрока ввода не в правильном формате при чтении текстового файла в массив 2d

Строка ввода была неправильной формы.

Я проверил текстовый файл, и все как должно быть, и я не могу понять, почему эта ошибка происходит?

 int[,] numberMatrix = new int[10, 10]; 
     string[] split = null; 

     for (int rowCount = 1; rowCount < 11; rowCount++) 
     { 
      int[] temp1DArray = new int[10]; 
      string fileLocation = "C:\\Week10\\one.txt"; 
      string textFile = File.ReadAllText(fileLocation); 

      for (int columnCount = 1; columnCount < 11; columnCount++) 
      { 
       string delimStr = " "; 
       char[] delimiter = delimStr.ToCharArray(); 
       //string fileLocation = "C:\\Week10\\1-100.txt"; 
       //string textFile = File.ReadAllLines(fileLocation); 
       for (int x = 0; x <= 10; x++) 
       { 
        split = textFile.Split(delimiter, x); 
       } 
      } 

      for (int rowCount1 = 1; rowCount1 < 11; rowCount1++) 
      { 
       for (int columnCount = 1; columnCount < 11; columnCount++) 
       { 
        numberMatrix[rowCount1 - 1, columnCount - 1] =Convert.ToInt32(split.ElementAt(columnCount - 1)); 
       } 
      } 
     } 

     for (int rowCount = 10; rowCount > 0; rowCount--) 
     { 
      for (int columnCount = 10; columnCount > 0; columnCount--) 
      { 
       Console.WriteLine(numberMatrix[rowCount - 1, columnCount - 1]); 
      } 
     } 
    } 
+0

говорится, что ошибка указана в строке 40 – ProgrammingRookie

+0

Какая строка 40? :) –

+0

Приведите пример содержимого файла и ожидаемого результата –

ответ

0

Так хорошо, вы не предоставили каких-либо содержимое файла и точное описание исключений (он может стрелять по любой причине, возможно). Я могу дать гораздо более простую реализацию для синтаксического анализа файлов. Я не могу придумать ответ, который волшебным образом найти причину того, почему один номер в файле не может быть разобрано на int

string[] lines = File.ReadAllLines(@"C:\temp\1.txt"); 
var options = StringSplitOptions.RemoveEmptyEntries; 

int[][] numbers = lines.Select(line => line.Split(new[]{' '}, options) 
              .Select(int.Parse) 
              .ToArray()) 
         .ToArray(); 

Console.WriteLine(string.Join(Environment.NewLine, 
           numbers.Select(n => string.Join(" ", n)))); 

Для файла:

1 10 20 30 
4234 35 123 543 
42 54 345 645 

печатает:

1 10 20 30 
4234 35 123 543 
42 54 345 645 

Если вам нужен прямоугольник массива int[,] использовать следующий гр ода, чтобы разобрать его.

int [,] numbersRect = new int[numbers.Length, numbers[0].Length]; 

for (int i = 0; i < numbersRect.GetLength(0); i++) 
{ 
    for (int j = 0; j < numbersRect.GetLength(1); j++) 
    { 
     numbersRect[i,j] = numbers[i][j]; 
    } 
} 
+0

Приветствия Я провел ваш код и отлично. Должно быть, проблема в вложенных циклах. Однако я должен согласиться с тем, что ваш код намного проще. – ProgrammingRookie

-1

Откуда я стоял, разделив массив. И numberMatrix [rowCount1 - 1, columnCount - 1] - это элемент массива, а не сам массив. Поэтому numberMatrix [rowCount1 - 1, columnCount - 1] = Convert.ToInt32 (split.ElementAt (columnCount - 1)); приведет к возникновению исключения. Также Convert.ToInt32 принимает одно значение, а не массив.

 Смежные вопросы

  • Нет связанных вопросов^_^