Просмотр полной версии : цикл делфи
Кароче такой вопрос получаю сорсы страницы в стринг, в ней есть несколько искомых строк одну эту строку я могу найти, но вот немогу найти эти строки до конца переменной как сделать?
var
sl:tstringlist;
i:integer;
begin
sl:=tstringlist.create;
sl.text:=http.get('site.ru');
for i:=0 to sl.count-1 do
begin
//поиск строки, вывод куда надо
end;
end;
stepashka_
29.04.2010, 19:56
Выложи код.
Вот код, 1n0y должен помочь, он что-то типо этого делал
procedure TForm1.Button1Click(Sender: TObject);
var
s,s1,i:integer;
cod:string;
params, responseres : tstringlist;
begin
params := TStringList.Create;
responseres := TStringList.Create;
try
params.Add('Login=wolf12309');
params.Add('Domain=mail.ru');
params.Add('Password=1234567');
responseres.Text := IdHTTP1.Post('http://win.mail.ru/cgi-bin/auth',params);
if Pos('logout',responseres.Text)>0 then
responseres.Text :=IdHTTP1.Post('http://my.mail.ru/my/search?search=1&typeSimple=1&type=1&query=&firstname=&country=24&lastname=&city=25',params);
if Pos('message&to=',responseres.Text)<>0 then
ShowMessage('Поиск начат!');
for i:= 0 to 2 do //тут нихрена не получаеться
begin
s:=pos ('message&to=',responseres.Text);
s1:=pos ('ru" title',responseres.Text);
memo2.text:=copy(responseres.Text,s+11,s1-s-9);
end;
finally
params.free;
responseres.free;
end;
end;
Вот код, 1n0y должен помочь, он что-то типо этого делал
1. Как один из вариантов копировать стринг.
1. 1. нашел, что надо, запомнил
1. 2. Удалил, от конца позиции - все начало. Delete
2. В инете много функций POS которые Работаютт с указанием позиции, тоесть нашел, запомнил позицию +1 дальше ищем...
как я понял, тебе нужно парсить мыла?
я делал так:
var
i:integer;
ml:string;
resp:tstringlist;
// захожу на акк
resp:=tstringlist.create;
resp.Text:=form1.http1.get('ссылка на поиск');
for i:=0 to resp.Count-1 do
begin
if Pos('www.mail.ru/agent?message&to=',resp.Strings[i])>0 then // если в строке есть эта строчка, то парсим мыла
begin
ml:=copy(resp.Strings[i], pos('www.mail.ru/agent?message&to=',resp.Strings[i]),99);
delete(ml, 1, 29);
delete(ml, pos('"',ml) ,length(ml));
form1.memo1.lines.add(ml); // добавляем мыло в мемо.
end
end;
ml:=copy(resp.Strings[i], pos('www.mail.ru/agent?message&to=',resp.Strings[i])+29,99);
delete(ml, pos('"',ml) ,length(ml));
Думаю так быстрее будет чуточку :)
В идеале вообще бы так:
ml:=copy(resp.Strings[i], pos('www.mail.ru/agent?message&to=',resp.Strings[i])+29,pos('"',resp.Strings[i]);
JnK, ага, так действительно лучше :)
ребят проблема с функции delete, кароче делаю так
responseres := TStringList.Create;
delete (responseres.text,0,pos('" title="Ще',responseres.text)+11);
компилятор выдают ошибку [DCC Error] Unit1.pas(51): E2197 Constant object cannot be passed as var parameter
кароче удаляю с начала , вклюяительно позиции title="Ще, но компилятор не пропускает что я не правильно делаю
Delete функция работает только с VAR (чтение/Запись)
Тоесть тебе надо присвоить значение какому нить стринку и резать как душе угодно.
var
str:string;
begin
responseres := TStringList.Create;
Str:=responseres.text;
delete (str,0,pos('" title="Ще',responseres.text)+11);
responseres.Free;
end;
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot