Как преобразовать строку из текстового файла в Int

#c#

#c#

Вопрос:

Я пытаюсь прочитать текстовый файл, который содержит строки чисел, и я хочу иметь возможность конвертировать каждую строку из файла в Int и сохранять ее в массиве, чтобы я мог позже выполнять математические вычисления.

Это то, что я пробовал в Visual Studio, и оно выдает сообщение «System.Исключение FormatException: ‘Входная строка была в неправильном формате.'».

 static void Main(string[] args)
{
    using (StreamReader List1 = new StreamReader("path of text file.txt"))
    {
        string input;
        List<string> High256 = new List<string>();
        while((input = List1.ReadLine()) != null)
        {
            Convert.ToInt32(input);
        }
        High256.Add(input);
        Console.WriteLine(High256);
    }
}
  

Комментарии:

1. Вы отладили и проверили ввод? 😉

2. Добро пожаловать в Stack Overflow. Использовали ли вы отладчик или другую диагностику (например, записывая значение input в консоль), чтобы увидеть, какое значение не выполняется?

3. Опубликуйте образец данных в файле.

4. Какое значение вы получаете в input переменной?

5. int[] array = File.ReadLines("path of text file.txt").Where(line => !string.IsNullOrEmpty(line)).Select(line => int.Parse(line)).ToArray();

Ответ №1:

Сначала вам нужно проверить, можете ли вы преобразовать в int или нет.

 static void Main(string[] args)
{
    var List1 = new File.ReadAllLines("path of text file.txt");

        string input;
        List<string> High256 = new List<string>();
        foreach(var item in List1)
        {

            if(int.TryParse(item?.Trim(), out var tempInt))
              {
                  High256.Add(tempInt);
                  Console.WriteLine(High256);
              }


        }


}
  

или в одну строку:

 var list = File.ReadAllLines("path")
.Where(x => int.TryParse(x, out var temp))
.Select(t=>int.Parse(t.Trim())).ToList();  
  

Ответ №2:

Вы можете использовать Linq и сделать следующее:

     int[] array = File.ReadAllLines("path").Select(t=>Convert.ToInt32(t)).ToArray();        
  

это прочитает все строки из файла и преобразует каждую строку в тип int32, наконец, вы получите массив int!

Комментарии:

1. Если есть проблема, пожалуйста, приложите файл

2. Это не решит проблему FormatException, которую получает OP

3. @AmirNo-Family: Ну, не лучше ли ему исправить файл, чем сделать код более щадящим? Единственное описание файла, которое у нас есть, — это «текстовый файл, содержащий строки чисел». Если она должна содержать только числа, ему не нужно заставлять код работать с не числами, вместо этого кажется, что это ошибка, которая находится в файле.