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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2010, 13:26   #1
khofa
 
Регистрация: 25.01.2010
Сообщений: 6
По умолчанию Поиск по тексту

Здравствуйте! сделал поиск по форуму, почитал, но того, что искал не нашел....
Вот что мне надо и что получилось: через idhttp я сделал запрос кода страницы, получилось, и содержимое отправил на edit1.text, теперь я хочу сделать поиск ссылок по маске, для начала сделал поиск первых 10 любых ссылок, т.е.
Код:
procedure TForm1.Button4Click(Sender: TObject);
var a:string;
    i,q,w:integer;
begin
  a:=edit2.Text;
  ListBox1.Items.Clear;
  for i:=0 to 10 do
  begin
    q:=pos('<a ',edit1.Text);
    w:=pos('</a>',edit1.Text);
    listbox1.Items[i]:=copy(edit1.Text,q,w+4);
    q:=0;
    w:=0;
  end;
end;
но запустив, я понял, что эта прога не работает..... она берет самую первую ссылку, и копирует ее 10 раз, как мне сделать правильно? =( я уже 3-ий день голову ломаю =(
ЗЫ. вариант
Код:
  for i := 0 to Webbrowser1.OleObject.Document.links.Length - 1 do
    Listbox1.Items.Add(Webbrowser1.OleObject.Document.Links.Item(i));
не подходит, т.к. в дальнейшем мне надо будет вставить маску для ссылок... хотя....может кто то и с этим предложит что нить.... и еще, этот способ поиск с загруженной страницы, а это уже траф за рисунки....
khofa вне форума Ответить с цитированием
Старый 06.02.2010, 13:33   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Код:
procedure TForm1.Button4Click(Sender: TObject);
var a,s:string;
    i,q,w:integer;
begin
  a:=edit2.Text;
  s:=edit1.text;
  ListBox1.Items.Clear;
  for i:=0 to 10 do
  begin
    q:=pos('<a ',s);
    w:=pos('</a>',s);
    listbox1.Items[i]:=copy(s,q,w-q+4);
    delete(s,q,w-q+4);
  end;
end;
pushl $0x18E3DF6B
call ICQ

Последний раз редактировалось russian-stalker; 06.02.2010 в 15:18.
russian-stalker вне форума Ответить с цитированием
Старый 06.02.2010, 14:09   #3
khofa
 
Регистрация: 25.01.2010
Сообщений: 6
По умолчанию

я подредактировал код:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var a,s:string;
    i,q,w:integer;
begin
  a:=edit2.Text;
  s:=edit1.Text;
  ListBox1.Items.Clear;
  for i:=0 to 10 do
  begin
    q:=pos('http://',s);
    w:=pos('">',s);
    listbox1.Items[i]:=copy(s,q,w+4);
    delete(s,q,w+4);
  end;
end;
вот что получается:

в чем же дело? пробовал ставить другие значения... но все же муть какая то получается....
khofa вне форума Ответить с цитированием
Старый 06.02.2010, 15:01   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

начиная с Delphi 7 есть posEx
Код:
q:=0;
  for i:=0 to 10 do
  begin
    q:=posEx('http://',s,q);
    w:=posEx('">',s,q+1);
//   listbox1.Items[i]:=copy(s,q,w+4);
    listbox1.Items[i]:=copy(s,q,w+1-q);
//третий параметр ДЛИНА(число копируемых) а не позиция
    q:=w; //    delete(s,q,w+4);
  end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.02.2010 в 15:06.
evg_m вне форума Ответить с цитированием
Старый 06.02.2010, 16:08   #5
khofa
 
Регистрация: 25.01.2010
Сообщений: 6
По умолчанию

posEx ошибку выдает? надо отдельно в uses подключать? если да, то какой компонент?...
khofa вне форума Ответить с цитированием
Старый 06.02.2010, 17:12   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Нужен модуль StrUtils
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 08.02.2010, 11:18   #7
khofa
 
Регистрация: 25.01.2010
Сообщений: 6
По умолчанию

Код:
function GetFiles(Path:String; Full: Boolean = False):TStrings;
   Var
   Rec:TSearchRec;
   TMP:TStrings;
   ls: String;
   i: integer;
begin
  Result:=TStringList.Create;
  if Path[Length(Path)]<>'\' Then Path:=Path+'\';
  //ChDir(Path);
  if FindFirst(Path+'\*.*',faAnyFile,Rec)=0 then
    begin
     if (Rec.Name<>'.')and(Rec.Name<>'..') then
       if (Rec.Attr and faDirectory) <> 0 then begin
       TMP:=GetFiles(Path+Rec.Name,True);
       Result.AddStrings(TMP);
       TMP.Free;
       end else Result.Add(Path+Rec.Name);

     while FindNext(Rec)=0 do
       begin
        if (Rec.Name<>'.')and(Rec.Name<>'..') then
         if (Rec.Attr and faDirectory) <> 0 then begin
         TMP:=GetFiles(Path+Rec.Name,True);
         Result.AddStrings(TMP);
         TMP.Free;
         end else Result.Add(Path+Rec.Name);
       end;
    end;

if not Full then
  for i:=0 to Result.Count-1 do
   begin
     ls := Result[i];
     Delete(ls,1,Length(Path));
     Result[i] := ls;
   end;
  FindClose(Rec);
end;

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
    a,b,d,i:integer;
begin
ListBox1.Items.Assign(GetFiles(edit1.text));
d:=listbox1.Items.count;
for i:=0 to d-1 do
if pos('html',ListBox1.Items[i])<>0 then
begin
Memo1.Lines.LoadFromFile(ListBox1.Items[i]); // загрузка
s:=memo1.text;
a:=pos(edit2.text,s);
b:=pos(edit3.Text,s)+length(edit3.Text)-1;
delete (s,a,b);
memo1.text:=s;
Memo1.Lines.SaveToFile(ListBox1.Items[i]); // сохранение
end;
ShowMessage('обработка закончена');
end;
почему в этом коде начало режется все нормально, а конец, где должен заканчиваться урезание не правильно..... причем вычислял посимвольно, это расстояние всегда меняется....
ЗЫ. скачал он-лайн учебник. а там много ненужного(меню, реклама...) так вот хотел все прочистить =)
khofa вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодування тексту DOS, Ko8, ISO OlegBodom Помощь студентам 0 16.12.2009 23:28
Присваивание тексту Memo значения из TStringList Alex Cones Общие вопросы Delphi 10 14.08.2009 21:07
Выровнять ширину слоя по тексту ferol HTML и CSS 6 05.04.2009 10:05
Пре и Пост приставки к выделеному тексту Veiron Общие вопросы Delphi 2 26.03.2009 22:23