Цикл заканчивается раньше, чем количество строк в списке

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
Всем привет, друзья, подскажите что делаю не так. У меня цикл работает не до конца, те я ставлю условие выполнять пока переменная меньше числа строк в списке, в итоге какое то колво выполняется и переходит дальше, вот код


C#:
Tab Tab1 = instance.ActiveTab;
IZennoTable TableUsage = project.Tables["Usage"];
var ListUrlPage = project.Lists["url"];
var ListUrlPage2 = project.Lists["urlCategory"];


for (int urlCategory=0; urlCategory<ListUrlPage2.Count; urlCategory++) {
string urlParse2 = ListUrlPage2[0];
        Tab1.Navigate(urlParse2);
ListUrlPage2.RemoveAt(0);
    Tab1.WaitDownloading();
   

HtmlElementCollection href = Tab1.FindElementsByXPath("//div[@class='prodName']");
foreach (HtmlElement elHref in href.Elements) {
string url = elHref.FindChildByXPath (".//a", 0).GetAttribute("href");
    ListUrlPage.Add(url);
   
    }
for (int j=0; j<ListUrlPage.Count; j++) {
string urlParse = ListUrlPage[0];
        Tab1.Navigate(urlParse);
ListUrlPage.RemoveAt(0);
    Tab1.WaitDownloading();

    string articul = Tab1.FindElementByXPath("//div[@class='prodParams']/div[@class='prodArt']", 0).GetAttribute("innertext");
    string replaceArticul = articul.Replace("Артикул: " , string.Empty);
    project.SendInfoToLog(replaceArticul);  
    for (int i=0; i<TableUsage.RowCount; i++) {
    var btable = TableUsage.GetCell("B",i);
       
    if (btable==replaceArticul) {
        TableUsage.SetCell("L",i, "окей");
   
        System.Threading.Thread.Sleep(20);
       
    }

}
    project.SendInfoToLog("Артикул " +replaceArticul);
        project.SendInfoToLog("строка номер " +j);
    }

}
причем эта проблема у меня постоянная, видимо делаю одну и ту же ошибку, сильно не ругайте неделю учу шарп(
 

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
Если вбиваю вывести колво строк, то находит столько же по хпасу, сколько и на сайте, и в список добавляет столько же, а вот работает не со всеми строками(((
 

TwistDanceR

Client
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Если вбиваю вывести колво строк, то находит столько же по хпасу, сколько и на сайте, и в список добавляет столько же, а вот работает не со всеми строками(((
Ты удаляешь строку каждый цикл. тоесть у тебя начинается c 0 цикл, ты берешь ПЕРВУЮ строку и удаляешь - результат: ВТОРАЯ становится ПЕРВОЙ
Цикл прошёл, на 2й итерации берется ВТОРАЯ строка , а ПЕРВАЯ, которая в первой итерации встала на место удалённого - НЕ учитывается.

Выход - удалить эту строку. Попробовать, ответить.

P.S. Для недели - очень недурно.
42605
 

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
Ты удаляешь строку каждый цикл. тоесть у тебя начинается c 0 цикл, ты берешь ПЕРВУЮ строку и удаляешь - результат: ВТОРАЯ становится ПЕРВОЙ
Цикл прошёл, на 2й итерации берется ВТОРАЯ строка , а ПЕРВАЯ, которая в первой итерации встала на место удалённого - НЕ учитывается.

Выход - удалить эту строку. Попробовать, ответить.

P.S. Для недели - очень недурно.
Посмотреть вложение 42605
я думаю если бы у меня вместо этого

C#:
string urlParse2 = ListUrlPage2[0];
был бы код

C#:
string urlParse2 = ListUrlPage2[urlCategory=];
тогда бы, наверное было бы так, как ты написал, я же беру строчку не по счетчику и у меня на второй итерации также берется первая строчка, а не вторая
 

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
те в цикле берется первая и удаляется первая, а счетчик идет до момента не более количества строк в списке
 

TwistDanceR

Client
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
те в цикле берется первая и удаляется первая, а счетчик идет до момента не более количества строк в списке
Точно, пропустил... Ты смотрел как отрабатывает процесс? Я обычно уделяю время чтобы тайминги(паузы) перепроверить, начинает более чётко работать
 

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
Точно, пропустил... Ты смотрел как отрабатывает процесс? Я обычно уделяю время чтобы тайминги(паузы) перепроверить, начинает более чётко работать
Вот это не совсем знаю, как смотреть, я обычно логирую, но как понять ошибку, в дне счётчик корректно работает по порядку, но не доходит до конца, такое чувство что свойство count меньше, но я отделено выводил, все четко ((
 

nole

Client
Регистрация
19.11.2010
Сообщения
368
Благодарностей
217
Баллы
43
У тебя каждую итерацию уменьшается количество строк списка, поэтому логично, что количество итераций будет меньше, чем строк в списке. Возьми изначальное количество строк в переменную и используй ее с цикле
 

TwistDanceR

Client
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
У тебя каждую итерацию уменьшается количество строк списка, поэтому логично, что количество итераций будет меньше, чем строк в списке. Возьми изначальное количество строк в переменную и используй ее с цикле
Точно... а я думаю что не так... Всё правильно думал, и даже, возможно, правильно подсказал)))
 

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
У тебя каждую итерацию уменьшается количество строк списка, поэтому логично, что количество итераций будет меньше, чем строк в списке. Возьми изначальное количество строк в переменную и используй ее с цикле
блин что то я не вкуриваю, у меня каждую итерацию как уменьшается колво строк в списке, так и используется это же количество, если бы я использовал удаление не 0 строки было бы понятно, а так че то я вообще не догоняю, как это работает
 

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
я изначальное колво строк и беру в переменную
urlCategory<ListUrlPage2.Count
разве нет?
 

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
ааа блин, те получается каждую итерацию мы пересчитываем колво строк в листе???
 

TwistDanceR

Client
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
ааа блин, те получается каждую итерацию мы пересчитываем колво строк в листе???
Нет. У тебя каждую итерацию кол-во строк в листе уменьшается на 1. То есть цикл идет, первая-то берётся строка, но строк всё меньше и меньше.
Вводишь индекс и всё. Т.е. Ты берешь айтем листа по номеру j, который каждую итерацию меняется, и строку тогда не нужно удалять.

P.S. всмысле да, у тебя кол-во строк уменьшается, соотв. listurlpage.count тоже

C#:
for (int j=0; j<ListUrlPage.Count; j++)
{
    string urlParse = ListUrlPage[j];
    Tab1.Navigate(urlParse);
    //ListUrlPage.RemoveAt(0);
    Tab1.WaitDownloading();
Этих изменений должно хватить чтобы избавиться. Пробуй.
 
  • Спасибо
Реакции: temass

nole

Client
Регистрация
19.11.2010
Сообщения
368
Благодарностей
217
Баллы
43
И учись сразу нормально форматировать код, самому будет проще ориентироваться
 

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
И учись сразу нормально форматировать код, самому будет проще ориентироваться
спасибо вам! действительно, если подставить цифры, то все так и получается, логично, но не сразу видно! А насчет кода да, надо красиво писать, пока учусь!
 

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