Помогите найти ошибку в коде C#

impul5e

Client
Регистрация
15.08.2017
Сообщения
198
Благодарностей
40
Баллы
28
Всем привет, пишу код c#, который в цикле проходит по списку, берет каждую строку по очереди и разбивает его на переменные. Но тот код, который я написал отрабатывает по ошибке. Сам код:
C#:
for (int i = (project.Lists["path"]).Count; i > 0; i--)
{   var path = project.Variables["path"].Value;
    var q = Macros.FileSystem.FileGetLine(path,i.ToString(),false); // получаем i-ую строку из файла
var login = q.Split(';')[0];
var pass = q.Split(';')[1];
var s = q.Split(';')[2];
}
Ошибка такая:
Выполнение действия CSharp OwnCode. Последовательность не содержит соответствующий элемент
Заранее благодарю за ответы.
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 677
Благодарностей
1 859
Баллы
113
Ошибка такая:
Выполнение действия CSharp OwnCode. Последовательность не содержит соответствующий элемент
Возможно у вас в переменную записывается null или некорректное значение. или количество элементов массива меньше, чем нужно. Попробуйте выводить в лог значения переменных которые обрабатываете, тогда сможете поймать нужную строку или значение. или оберните цикл в try catch
C#:
try
{
    код цикла
   
}
catch (Exception ex)
{
    вывод текста ошибки ex.Message
}
 
  • Спасибо
Реакции: impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
198
Благодарностей
40
Баллы
28
Ту же ошибку пишет: Последовательность не содержит соответствующий элемент
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 677
Благодарностей
1 859
Баллы
113
Ту же ошибку пишет: Последовательность не содержит соответствующий элемент
добавьте вывод в лог каждого взятого значения из списка. Можно после каждой строки, так поймаете место, когда возникает ошибка. Часто в ошибке пишет номер строки в которой ошибка. Может у вас что то неверно написано и ошибка в синтаксисе.
 
  • Спасибо
Реакции: bashka и impul5e

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
вроде не видет зеннопостер член Macros

метод получения строки в документации -
FileSystem.FileGetLine(path, numberOfLine, removeLine);
 
  • Спасибо
Реакции: impul5e
Регистрация
07.08.2019
Сообщения
75
Благодарностей
78
Баллы
18
К примеру у вас в списке 10 строк.
project.Lists["path"].Count скажет вам 10, и это правда.
Но строки в списке стоят по индексу от 0. В вашем случае от 0 до 9.
Тут вы берете несуществующую 10 строку. Вылезает ошибка.
Macros.FileSystem.FileGetLine(path,i.ToString(),false); // получаем i-ую строку из файла

Вам нужно сделать i-1, наверное так.
Macros.FileSystem.FileGetLine(path, (i-1).ToString(),false); // получаем i-ую строку из файла
И в этом случае вы возьмете как раз таки 10 строку. Которая будет девятой. Но она десятая) Надеюсь поняли этот каламбур)
 
  • Спасибо
Реакции: impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
198
Благодарностей
40
Баллы
28
Нашел ошибку здесь:
project.Lists["path"]).Count
Дело в том, что я не хотел создавать список и работал с файлом, задавая путь через переменную, соответственно такого списка и не было. Теперь вопрос в том, можно ли как-то получить количество строк не в списке, а в файле?
Решение нашел:
Заменил
(project.Lists["path"]).Count на File.ReadAllLines(path).Length
И перед этим прописал:
var path = project.Variables["path"].Value;
 
Последнее редактирование:

impul5e

Client
Регистрация
15.08.2017
Сообщения
198
Благодарностей
40
Баллы
28
К примеру у вас в списке 10 строк.
project.Lists["path"].Count скажет вам 10, и это правда.
Но строки в списке стоят по индексу от 0. В вашем случае от 0 до 9.
Тут вы берете несуществующую 10 строку. Вылезает ошибка.
Macros.FileSystem.FileGetLine(path,i.ToString(),false); // получаем i-ую строку из файла

Вам нужно сделать i-1, наверное так.
Macros.FileSystem.FileGetLine(path, (i-1).ToString(),false); // получаем i-ую строку из файла
И в этом случае вы возьмете как раз таки 10 строку. Которая будет девятой. Но она десятая) Надеюсь поняли этот каламбур)
Всё, понял, сейчас исправлю код и буду проверять, всем спасибо большое! Давненько на форуме не сидел и приятно удивлен, что многие помогли искать решение. Дружный форум у зенки, так держать!
 
Регистрация
07.08.2019
Сообщения
75
Благодарностей
78
Баллы
18
Нашел ошибку здесь:
project.Lists["path"]).Count
Дело в том, что я не хотел создавать список и работал с файлом, задавая путь через переменную, соответственно такого списка и не было. Теперь вопрос в том, можно ли как-то получить количество строк не в списке, а в файле?
Советую еще сделать цикл такого формата:
for (int i = project.Lists["path"].Count-1; i >= 0; i--)
И тогда i будет сразу правильным. (Цикл будет с 9 до 0 включительно)

И для списка:
project.Lists["path"] значит что уже есть список с именем path ну и с какими то данными.
Его подвязать к файлу можно либо через настройки списка.

Либо через код
string path = тут путь
if (File.Exists(path)) project.Lists["название списка"].Bind(path);
else throw new Exception("Путь не верный");
 
  • Спасибо
Реакции: impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
198
Благодарностей
40
Баллы
28
Советую еще сделать цикл такого формата:
for (int i = project.Lists["path"].Count-1; i >= 0; i--)
И тогда i будет сразу правильным. (Цикл будет с 9 до 0 включительно)

И для списка:
project.Lists["path"] значит что уже есть список с именем path ну и с какими то данными.
Его подвязать к файлу можно либо через настройки списка.

Либо через код
string path = тут путь
if (File.Exists(path)) project.Lists["название списка"].Bind(path);
else throw new Exception("Путь не верный");
этот код тоже очень помог, а то я исправил, а ошибка осталась. Спасибо! А подскажите, что значит i-- в конце?
 
Регистрация
07.08.2019
Сообщения
75
Благодарностей
78
Баллы
18
этот код тоже очень помог, а то я исправил, а ошибка осталась. Спасибо! А подскажите, что значит i-- в конце?
Это значит что после каждой итерации цикла i уменьшится на 1
У вас цикл. Перебрать все элементы цикла с конца до 0. Вот он и будет работать например 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 и закончит)
 
  • Спасибо
Реакции: impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
198
Благодарностей
40
Баллы
28
Регистрация
07.08.2019
Сообщения
75
Благодарностей
78
Баллы
18
Получается первая строка списка идентифицируется как нулевая?
В этом случае:
for (int i = project.Lists["path"].Count-1; i >= 0; i--)
начальной точкой i будет количество строк в списке минус одна строка.

Если в списке 10 строк всего
То начальной точкой будет 9 и будет уменьшаться до 0
(9, 8, 7, 6, 5, 4, 3, 2, 1, 0 и закончит)

Да. Первая строка списка - нулевая.
 
  • Спасибо
Реакции: impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
198
Благодарностей
40
Баллы
28
У меня почему-то с такой логикой из списка в две строки проходит только первую.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)