Jk19 Ответов: 2

Индекс и длина должны ссылаться на местоположение внутри строки.имя параметра: длина


общественного переопределить недействительными метод createnewoutputrows()
{
StreamReader sr = новый StreamReader(fullFilePath);

int lineIndex = 0;
строки;
хотя (!СР.EndOfStream)
{
строка = СР.С readline();

если (строка.Подстрока(0,1).ToString() == "P")
{
Хедербуффер.Метода addrow();
Хедербуффер.Индикаторная линия.Подстрока(0,1).Метод toString();
}

lineIndex = lineIndex + 1;

}
СР.Рядом();
}

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

Мне просто нужно прочитать строку заголовка 1-го символа из плоского файла и записать в таблицу.
Пожалуйста, помогите, почему я получаю эту ошибку "индекс и длина должны ссылаться на местоположение внутри строки. Имя параметра: длина ".

Спасибо

j snooze

довольно уверен, что если вы отладите это и посмотрите на значение в вашей переменной "line", то оно, вероятно, будет пустым. Итак, функция подстроки кричит на вас, говоря, что индекс 0 и длина 1 не существуют. Вы узнаете это только при отладке.

Jk19

Спасибо за быстрый ответ Snooze!

2 Ответов

Рейтинг:
15

Dave Kreskowiak

Вы могли бы легко найти это, если бы просто запустили код под отладчиком.

Ваш код обрабатывает каждую строку текстового файла, который Вы читаете, как если бы в нем был один или несколько символов. Это просто не тот случай. У вас есть пустые строки в вашем файле, которые имеют длину 0, следовательно, вы получаете исключение.

А теперь, что ты собираешься с этим делать? Как насчет проверки длины 0, прежде чем что-то делать с линией?


Jk19

Спасибо, Дэйв! будет отлаживать и проверять ошибку.

Рейтинг:
11

Patrice T

Цитата:
почему я получаю эту ошибку "индекс и длина должны ссылаться на местоположение внутри строки. Имя параметра: длина ".

Сообщение об ошибке говорит вам, что вы пытаетесь выполнить подстроку вне строки.
В
line.Substring(0,1).ToString()

вы забыли проверить, что строка содержит по крайней мере 1 символ.
С помощью отладчика вы можете наблюдать за работой программы.

Ваш код ведет себя не так, как вы ожидаете, и вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]
Отладка кода C# в Visual Studio - YouTube[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Jk19

Спасибо. Я буду следовать вашим предложениям. Я новичок в VS(c#)
У меня есть Visual studio, в которой отладчик был установлен неправильно, и он выдает ошибку, когда я пытаюсь запустить скрипт. Я пытаюсь запустить плагин, чтобы заставить его работать..

Patrice T

переустановка VS должным образом стоит хлопот.

Jk19

Ответить


Также не могли бы вы дать совет, как преодолеть проблему, которую я получаю по ссылкам..
"'HeaderBuffer' не содержит определения для 'Version_Release' и не может быть найден метод расширения 'Version_Release', принимающий первый аргумент типа 'HeaderBuffer
(пропущена директива using или ссылка на сборку?)

Я пытаюсь вытащить больше столбцов и загрузить таблицу.
если (строка.Подстрока(0,1).ToString() == "P")
{
Хедербуффер.Метода addrow();
Хедербуффер.Индикаторная линия.Подстрока(0,1).Метод toString();
HeaderBuffer.Version_Release = строка.Подстрока(2, 2).ToString();
}
..

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.