Не могу прочитать текстовый файл целых чисел в массив целых - PullRequest
0 голосов
/ 03 апреля 2019

Это буквально сводит меня с ума по какой-то причине, мой код для чтения простого текстового файла целых чисел в массив int не работает.

private void HardButton_Click(object sender, EventArgs e)
    {
        int[] hard1 = { };
        int counter = 0;


        using (StreamReader inFile = new StreamReader("h1.txt"))
        {
            string str = null;

            while ((str = inFile.ReadLine()) != null)
            {
                hard1[counter] = Convert.ToInt32(str);
                counter++;
            }
        }

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

РЕДАКТИРОВАТЬ: Вот ввод txt файла

0502090
6070203
0502010
5020101
0503010
4020905
0608070

7582391
6478283
8592914
5628191
6573812
4728915
3648271

Ответы [ 3 ]

4 голосов
/ 03 апреля 2019

C # /. Net имеет реальных массивов , а не коллекций псевдо-массивов, которые вы видите во многих других языках (они тоже есть, просто они не пытаются выдавать их за массивы),Одним из атрибутов реальных массивов является фиксированный размер .

Так что, когда вы объявляете массив следующим образом:

int[] hard1 = { };

то, что у вас есть, это массив с фиксированным размером 0и, следовательно, присваивание массиву позже следующим образом:

hard1[counter] = Convert.ToInt32(str);

присваивание в никуда.

У вас есть много вариантов, чтобы это исправить.Вот один из них:

private void HardButton_Click(object sender, EventArgs e)
{
    var result = File.ReadLines("h1.txt").
         Where(line => !string.IsNullOrWhitespace(line)).
         Select(line => int.Parse(line)).
         ToArray();
}
1 голос
/ 03 апреля 2019

Если вы не знаете длину заранее ... используйте список.

private void HardButton_Click(object sender, EventArgs e)
{
    var hard1 = new List<int>();
    int counter = 0;


    using (StreamReader inFile = new StreamReader("h1.txt"))
    {
        string str = null;

        while ((str = inFile.ReadLine()) != null)
        {
            hard1.Add(Convert.ToInt32(str));
            counter++;
        }
    }
...

Если у вас нет полного контроля над файлом, может потребоваться сделать дополнительные элементы управления перед преобразованиемк int.

  • Является ли каждая строка ровно одним целым числом?
  • Нужно ли обрезать?
  • Могут ли быть пустые строки?
0 голосов
/ 03 апреля 2019

Используйте это:

private void button1_Click(object sender, EventArgs e)
{
    int[] hard1 = { };

    var lines = File.ReadAllLines("h1.txt");
    var lineWithoutEmptySpace = lines.Where(x => !string.IsNullOrEmpty(x)).ToArray();
    hard1 = new Int32[lineWithoutEmptySpace.Length];

    for (var i = 0; i < lineWithoutEmptySpace.Length; i++)
    {
        hard1[i] = Convert.ToInt32(lineWithoutEmptySpace[i]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...