У меня есть файл, который содержит в каждой строке значение из {-1, 0, 1, 2, 3}. Это выглядит так:
Я хочу поместить все эти значения в массив типа int следующим образом:
int[] linesValue = new int[NUMBER_OF_LINES];
int i;
for (i = 0; i < NUMBER_OF_LINES; i++)
{
string tmpVal = reader.ReadLine();
linesValue[i] = Convert.ToInt32(tmpVal);
}
"NUMBER_OF_LINES" - это частный int, а "reader" - StreamReader. Когда я запускаю код, он дает мне ошибку: "Строка ввода не была в правильном формате". Я попробовал reader.ReadLine(). ToString(), но он все еще не работает. Я был бы очень признателен, если вы, ребята, можете мне помочь с этой проблемой.
Вы получаете последнюю строку или разрывы строк как пустую строку в своей string
и которая не может быть преобразована в int
, следовательно, исключение. Просто добавьте проверку для string.IsNullOrWhiteSpace
как:
{
string tmpVal = reader.ReadLine();
if(!string.IsNullOrWhiteSpace(tmpVal))
{
linesValue[i] = Convert.ToInt32(tmpVal);
}
}
Также убедитесь, что вы поддерживаете свой index
с помощью этой проверки, поэтому вы можете получить пустые записи в вашем массиве из-за увеличения индекса.
Вы также можете использовать File.ReadLines
и анализировать каждую строку в массиве int
например:
int[] array = File.ReadLines("filePath")
.Where(r => !string.IsNullOrWhiteSpace((r)))
.Select(r => int.Parse((r)))
.ToArray();
Ищите метод int.TryParse
. Группа методов TryParse не вызывает исключение, если синтаксический анализ не выполняется. Они возвращают bool
указывающий, что синтаксический анализ был успешным или нет, и анализируемое значение предоставляется в параметре out
.