ShaHam11 Ответов: 2

Невозможно перейти к следующей строке, чтение из текстового файла


Привет


Индекс находился за пределами массива-ошибка


 List<string> Messagetype = new List<string>();

using (var reader = new StreamReader(@"C:\Users\Documents\TRWork\Download History\unpack\Estxxx.Acxx.AMER-EARN-2002-2003.1.2016-07-16-0001.Full.1.of.1.txt"))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        //split the line
                        string[] parts = line.Split(new[] { "|" }, StringSplitOptions.None);

                        //get valid text
                        Messagetype.Add(parts[1]);
                        Console.WriteLine(Messagetype.Count()); 
                       
                    }
                }


Что я уже пробовал:

Я попробовал отладить применение точки останова

Я не могу перейти к следующей строке. Первая строка считывается, и строковое значение сохраняется в переменной списка "Messagetype". Однако после первого цикла из while в следующий раз когда он повторяется он не переходит к следующей строке и становится нулевым

2 Ответов

Рейтинг:
1

OriginalGriff

Это не имеет ничего общего с "переходом к следующей строке" - это слишком связано с данными, которые Вы читаете.

string[] parts = line.Split(new[] { "|" }, StringSplitOptions.None);
Messagetype.Add(parts[1]);

Если строка, которую Вы читаете, не содержит символов"|", то метод Split возвращает массив, содержащий только один элемент. Поэтому, когда вы пытаетесь получить доступ к элементу с индексом один, он не существует, и вы получаете ошибку.
Поэтому начните с проверки Вашего текстового файла и посмотрите, почему в нем есть строка, в которой нет символов"|".
Если это ожидается, то проверьте это внутри вашего цикла:
string[] parts = line.Split(new[] { "|" }, StringSplitOptions.None);
if (parts.Length > 1)
   {
   Messagetype.Add(parts[1]);
   }


Рейтинг:
0

Patrice T

Вы должны действительно научитесь использовать отладчик как можно скорее. Пришло время увидеть, как ваш код выполняется и гарантирует, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Вы, вероятно, увидите, что ошибка находится на

Messagetype.Add(parts[1]);

и это parts[1] не существует, потому что вы split около "|", которого нет в line.