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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2011, 00:07   #1
dlauser
Пользователь
 
Регистрация: 29.11.2010
Сообщений: 11
По умолчанию Условие if выводит из цикла

Привет. Есть некий код,

Код:
begin
     for i := 0 to urls.Count-1 do
        begin
   link1:=urls.Strings[i];
i2:=Copy(link1,1, Pos('=', link1));
web:=Form2.IdHTTP1.Get(i2+'page1');
if Pos('yeaah', web) = 0 then
   Form2.Memo1.Lines.Add(i2);
Проблема в том, что условие выводит из цикла. Как переделать?
Пробовал и гото и с циклом по другому.
dlauser вне форума Ответить с цитированием
Старый 16.08.2011, 00:22   #2
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

А так

Код:

for i := 0 to urls.Count-1 do begin
   link1:=urls.Strings[i];
i2:=Copy(link1,1, Pos('=', link1));
web:=Form2.IdHTTP1.Get(i2+'page1');
if Pos('yeaah', web) = 0 then begin
   Form2.Memo1.Lines.Add(i2);
end; end; // добавить

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.

Последний раз редактировалось volod3000; 16.08.2011 в 00:29.
volod3000 вне форума Ответить с цитированием
Старый 16.08.2011, 00:44   #3
dlauser
Пользователь
 
Регистрация: 29.11.2010
Сообщений: 11
По умолчанию

И так проходит один раз и выходит из цикла
dlauser вне форума Ответить с цитированием
Старый 16.08.2011, 01:37   #4
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

urls.Count чему равен, не 1?
if не может вывести из цикла, это может только Break, Exit, исключительные ситуации и тд.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 16.08.2011, 01:46   #5
dlauser
Пользователь
 
Регистрация: 29.11.2010
Сообщений: 11
По умолчанию

Цитата:
urls.Count чему равен, не 1?
20 равен.

Весь код, может проблема где-то глубже


Код:

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    IdHTTP1: TIdHTTP;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


  TNewThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

var
  Form2: TForm2;
   urls:TStringList;
implementation

{$R *.dfm}

procedure TNewThread.Execute;
var
i:integer;
link1,i2:String;
web:String;
begin
     for i := 0 to urls.Count-1 do begin
   link1:=urls.Strings[i];
   i2:=Copy(link1,1, Pos('=', link1));
   //Form2.Memo1.Lines.Add(i2+'page1');

        web:=Form2.IdHTTP1.Get(i2+'page1');

        if Pos('yeaah', web) = 0 then begin
   Form2.Memo1.Lines.Add(i2)
        end
        end;

end;

procedure TForm2.Button1Click(Sender: TObject);
var
  NewThread: TNewThread;
begin
  NewThread:=TNewThread.Create(true);
  NewThread.FreeOnTerminate:=true;
  NewThread.Priority:=tpLower;
  NewThread.Resume;

end;

procedure TForm2.FormCreate(Sender: TObject);
begin
urls:=TstringList.Create;
urls.LoadFromFile('urls-list.txt');
Form2.Label2.Caption:=intTOstr(urls.Count);
end;

end.
dlauser вне форума Ответить с цитированием
Старый 16.08.2011, 02:16   #6
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

а у вас точно urls.Count = 20, или в файле 20 строк?
попробуйте так:

for i:=0 to 20-1 do
begin ... end;

если проканает - значит urls.Count != 20
отобразите содержимое urls в memo, например.

а если опят выйдет из цикла - значит надо пересмотреть
исходники вселенной, может проблема где-то глубже...

кстати, нафига вам поток?
ах, да...
ну попробуйте тогда либо вообще без потока,
либо в поток запихнуть непосредственно только IdHTTP1.Get(...);
а все остальное без вне потока.
xrob вне форума Ответить с цитированием
Старый 16.08.2011, 07:02   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
И так проходит один раз и выходит из цикла
Как вы это определяете?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.08.2011, 10:00   #8
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

А из потока к Form2.Memo1 не через синхронизацию хотя бы надо обращаться?
astecenko вне форума Ответить с цитированием
Старый 16.08.2011, 10:06   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

for i := 0 to urls.Count-1 do
ВЫЧИСЛЕНИЕ ГРАНИЦ ЦИКЛА (для FOR) выполняется один раз ДО ВХОДА.
сответсвенно
Form2.Memo1.Lines.Add(i2);
Влияния на число повторов (границы цикла) не оказывает.
была вначале одна строка и выполнится одни раз.
используйте while
Код:
 i := 0
while i<urls.Count do begin
.....
i:=i+1;
end;
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 16.08.2011, 10:48   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

evg_m, мне кажется, что Ваш пост немножко "не в тему"!
Какое отношение Form2.Memo1 имеет к urls.Count ?!
urls читается из файла и в цикле не изменяется. Зачем менять цикл FOR на цикл While - не понятно...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не выводит числа tronuo Общие вопросы Delphi 1 06.06.2011 17:15
не выводит очередь margaritachka Общие вопросы C/C++ 0 10.05.2010 19:09
Особое условие для цикла Vikelf Помощь студентам 2 29.05.2009 08:01
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat McMilin Помощь студентам 7 11.11.2007 14:10