Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 06.07.2014, 00:18   #1
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
Вопрос Циклы, проблема, получаю ошибку "list index out of bounds (0)"

Циклы, проблема, получаю ошибку "list index out of bounds (0)"

Код:
var
   i, j, m:integer;
   fList, sList:TStringList.Create;
   RegExp:TRegExpr;
begin
   i:=0;
   fList:=TStringList.Create;
   sList:=TStringList.Create;
   RegExp:=TRegExpr.Create;
   fList.LoadFromFile(Form1.sFileNameEdit1.FileName);
   sList.LoadFromFile(Form1.sFileNameEdit2.FileName);

      while (i<fList.Count) and (Work=True) do
      begin
         m:=0; // тут он должно стоять т.к нужно обнулять счетчик когда берется следующая строка из листа fList
         
            while (m<Form1.sSpinEdit1.Value) and (Work=True) do
            begin
               j:=0;
   
                  while (True) and (Work=True) do // этот цикл сомнительный т.к не знал как по-другому в принципе это дело реализовать, но главное что так работает..
                  begin
                     IdHTTP1.GET('http://сайт.ru/go.php?prm='+fList[i]+'&prm2='+sList[m]+'&prm3='+IntToStr(j));

                        if RegExp.Exec(IdHTTP1) and (Work=True) then
                        begin
                        
                           repeat
                           //парсинг, тут все норм
                           until not RegExp.ExecNext;

                        end
                        else
                        Break;
                  
                     j:=j+5;       
                  end;
            
               inc(m);
            end;

         inc(i);
      end;

   fList.Free;
   sList.Free;
   RegExpr.Free;
end;
Прикол в том что я не могу прописать в начале цикла while (i<fList.Count) and (Work=True) do - m:=0; а это надо сделать чтобы сбить цикл иначе второй цикл, а именно while (m<Form1.sSpinEdit1.Value) and (Work=True) do выполняется только 1 раз а мне надо чтобы этот второй цикл выполнялся до тех пор пока работает цикл while (i<fList.Count) and (Work=True) do и естественно пока в листе который используется в этом цикле есть данные для обработки.

Последний раз редактировалось FleXik; 06.07.2014 в 00:22.
FleXik вне форума
Старый 06.07.2014, 00:41   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

И для чего здесь while? Разве у вас объект неизвестной длинны?
Человек_Борща вне форума
Старый 06.07.2014, 00:52   #3
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
И для чего здесь while? Разве у вас объект неизвестной длинны?
1. функция inc увеличивает переменную integer только на 1 значение у меня же j:=j+5; поэтому тут только цикл while, при цикле for счетчик увеличивается на 1 значение и автоматически.
2. не умею использовать цикл for так чтобы в нем было добавлено (Work=True), for i:=0 to (fList.Count-1) and (Work=True) не работает.
3. привычка, почти во всех случаях именно цикл while и использую.
FleXik вне форума
Старый 06.07.2014, 01:17   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,881
По умолчанию

list index out of bounds (0) говорит о том, что какой-то из списков просто пустой.
Что выглядит странно ибо оба они загружаются из файлов.
northener вне форума
Старый 06.07.2014, 01:24   #5
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
list index out of bounds (0) говорит о том, что какой-то из списков просто пустой.
Что выглядит странно ибо оба они загружаются из файлов.
вот-вот, я о том же, если убрать часть кода внутри цикла while (m<Form1.sSpinEdit1.Value) и m:=0; прописать в начале цикла while (i<fList.Count) and (Work=True) do - ошибка эта не выскакивает, поэтому грешу на цикл while (True) and (Work=True) do но не могу понять где проблема
FleXik вне форума
Старый 06.07.2014, 01:27   #6
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Еще момент, код в 1 посте с нуля писал (но он такой же как у меня без некоторых кусков в которых 100% нет ошибок)

sList наполняется спаршенными данными, но, он не пустой 1000000% (так что с Form1.sFileNameEdit2.FileName) я немного перегнул но тем не менее...
FleXik вне форума
Старый 06.07.2014, 01:30   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,881
По умолчанию

Цитата:
Сообщение от FleXik Посмотреть сообщение
вот-вот, я о том же, если убрать часть кода...
А я не о том же. Ты проверял что после
Код:
   fList.LoadFromFile(Form1.sFileNameEdit1.FileName);
   sList.LoadFromFile(Form1.sFileNameEdit2.FileName);
оба списка не пустые?
И не надо говорить про 1000000%. Надо просто проверить.
northener вне форума
Старый 06.07.2014, 01:37   #8
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
оба списка не пустые?
И не надо говорить про 1000000%. Надо просто проверить.
они не пустые, я в этом уже собаку сьел, вот если у меня с ListView проблемы первое время были потому что я с ним не работал никогда то тут я уверен на все 100%

всем спасибо за ответы в теме, благодаря вам, я, методом удаления частей кода по-очереди нашел в чем ошибка, у меня 2 разных шаблона RegExpr, первый шаблон регулярки в начале кода сразу после begin у Execute потока, а второй шаблон регулярки я засунул в цикл while (m<Form1.sSpinEdit1.Value) and (Ends=True) do из-за этого и получал эту ошибку, "закомментил" этот шаблон регулярки и все стало нормально работать и перестало ругаться.
FleXik вне форума
Старый 06.07.2014, 01:45   #9
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Фиг там, не перестало ругаться)) но проблема 100000% в шаблоне регулярки, уже перепроверил 5 раз.

Код:
RegExp.Expression:='откуда парсим(.*?)докуда парсим';
мне надо этот шаблон регулярки "запихнуть" куда-то чтобы все работало, помогите пожалуйста

если делаю так (ниже 2 варианта, в обеих вариантах ругается на list index out ....)
Код:
    while (i<fList.Count) and (Work=True) do
    begin
      m:=0;
      sList.Clear;

        if Form1.sSpinEdit1.Value>0 then
        begin
          IdHTTP1.Get('http://сайт.ru');

            if RegExp.Exec(IdHTTP1) then
            repeat
              sList.Add(RegExp.Match[1]);
            until
              not RegExp.ExecNext;

        end;

      RegExp.Expression:='откуда парсим(.*?)докуда парсим'; // регулярка правильная.

        while (m<Form1.sSpinEdit1.Value) and (Work=True) do
        begin
          j:=0;

            while (True) and (Work=True) do
            begin
              // запрос, бла-бла-бла
Код:
    while (i<fList.Count) and (Work=True) do
    begin
      m:=0;
      sList.Clear;

        if Form1.sSpinEdit1.Value>0 then
        begin
          IdHTTP1.Get('http://сайт.ru');

            if RegExp.Exec(IdHTTP1) then
            repeat
              sList.Add(RegExp.Match[1]);
            until
              not RegExp.ExecNext;

        end;

        while (m<Form1.sSpinEdit1.Value) and (Work=True) do
        begin
          j:=0;
          RegExp.Expression:='откуда парсим(.*?)докуда парсим'; // регулярка правильная.

            while (True) and (Work=True) do
            begin
              // запрос, бла-бла-бла
FleXik вне форума
Старый 06.07.2014, 01:46   #10
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,881
По умолчанию

Цитата:
Сообщение от FleXik Посмотреть сообщение
они не пустые, я в этом уже собаку сьел, вот если у меня с ListView проблемы первое время были потому что я с ним не работал никогда то тут я уверен на все 100%

всем спасибо за ответы в теме, благодаря вам, я, методом удаления частей кода по-очереди нашел в чем ошибка, у меня 2 разных шаблона RegExpr, первый шаблон регулярки в начале кода сразу после begin у Execute потока, а второй шаблон регулярки я засунул в цикл while (m<Form1.sSpinEdit1.Value) and (Ends=True) do из-за этого и получал эту ошибку, "закомментил" этот шаблон регулярки и все стало нормально работать и перестало ругаться.
Значит ты пудрил нам мозги либо самой ошибкой, либо приведённым кодом, который явно был другим, чем тот который давал эту ошибку.
northener вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делфи: выдает ошибку "Project raised exception class EstringListError wits message 'list index out of bounds (-1)' Катерина19 Помощь студентам 1 15.04.2014 12:15
list index out of bounds (0) King_Of_Arthur БД в Delphi 4 30.05.2013 06:42
List index out of bounds (91) KoBRaAndrey Общие вопросы Delphi 6 25.12.2009 15:29
List index out of bounds (44) KoBRaAndrey Общие вопросы Delphi 5 11.12.2009 23:03