Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Нужно отфильтровать строку, которая меняется


Автор: Pavelbej 31.3.2007, 10:34
Я захватывая ссылки из адресного поля браузера (Firefox, Opera...), но получаю в таком виде:

"http://www.afreego.com/AuthorCenter/","aFreeGo.com","" - это Mozilla
"http://portal.opera.com/","Opera - [Opera Search]" - это Opera
"http://www.google.md/","Google","" - это Firefox

Как убрать все лишнее, оставить только ссылки? 
Это все надо вывести в Edit.

Автор: Sunvas 31.3.2007, 10:44
Код

edit1.Text:=copy(edit1.Text,2,pos(',',edit1.Text)-3);

Автор: W4FhLF 31.3.2007, 14:54
Ну я как обычноsmile

Код

function FixStr(sUrl: string): string;
var
  exp:TRegExpr;
begin
  exp := TRegExpr.Create;
  exp.Expression := 'http\:\/\/.*\/';
  exp.Exec(sUrl);
  result := exp.Match[0];
  exp.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Add(FixStr('"http://www.afreego.com/AuthorCenter/","aFreeGo.com",""'));
end;


Варианта Sunvas'a здесь конечно оптимальней, но если условия чуть усложняться и маска приобретёт нестандартный вид от моего примера плясать легче)

Автор: Pavelbej 1.4.2007, 20:22
Прошу прощения что снова поднимаю тему но теперь возникла другай проблема.
А как получить в другом Edit-e, второй в кавычках текст?

Автор: Sunvas 1.4.2007, 20:55
Коряво, но работает:
Код

edit1.Text:=copy(edit1.Text,pos(',',edit1.Text)+2,pos(',',copy(edit1.Text,pos(',',edit1.Text)+2,maxint))-2);

Автор: Pavelbej 4.4.2007, 11:38
Есть проблемы со вторым кодом. Вот что получаю :

Mozilla 
     title -  VPF::↔C6=> >BD8;LB@>20BL AB@>:                       (Вместо руских букв - где искать причину?)
     link -   http://forum.vingrad.ru/topic-143811.html

Firefox 
     title -  VPF::Нужно отфильтровать строк
     link -   http://forum.vingrad.ru/topic-143811.html

Opera
     title -  Opera - [VPF::Нужно отфильтровать строк                (на некоторых сайтах вообще пусто)
     link -   http://forum.vingrad.ru/topic-143811.html 

IExplorer
     title -  VPF::Нужно отфильтровать строк                              (на некоторых сайтах вообще пусто)
     link -   http://forum.vingrad.ru/topic-143811.html 

Как видно, если в Заголовке страницы содержится запятая то текс оберазется от нее и до конца строки. Посмотрите, как можно обойти эту проблему.

Автор: ama_kid 4.4.2007, 11:52
Мне кажется, обойти можно обычным парсингом строк. У тебя ведь есть явные разделители - кавычки... Берешь строку - ищешь первую кавычку (видимо всегда будет самым первым символом). Строку до следующей кавычки заносишь в линк... Ну и т.п. для тайтла... В итоге - примерно так (без оптимизации):
Код

procedure ParsExpr(Expr:string; var Link,Title:string);
var
 i:integer;
begin
 i:=1;
 Link:='';
 while Expr[i]<>'"' do inc(i);
 inc(i);
 while Expr[i]<>'"' do
  begin
   Link:=Link+Expr[i];
   inc(i);
  end;
  inc(i);
 while Expr[i]<>'"' do inc(i);
 inc(i);
 Title:='';
 while Expr[i]<>'"' do
  begin
   Title:=Title+Expr[i];
   inc(i);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Title,Link:string;
begin
 ParsExpr('"http://www.afreego.com/AuthorCenter/","aFreeGo.com"',Link,Title);
 ShowMessage(Title);
 ShowMessage(Link);
end;

Автор: Pavelbej 4.4.2007, 20:14
ama_kid,  появляются ошибки когда загружаю новый адрес. А если использовать только Title то вроде бы лучше работает но тоже иногда выскакивает ошибка. Как иправить, поможешь?

Автор: VICTAR 4.4.2007, 21:41
У меня получился  вот такой вариант:
Код

function GetLink(Source: string; Part: integer=1): string;
var a, b, c: integer;
begin
  a:=0; b:=0; c:=0;
  repeat
    a:=PosEx('"', Source, succ(b));
    b:=PosEx('"', Source, succ(a));
    inc(c);
  until (c=Part)or(a=0);
  if a=0 then b:=0;
  result:=Copy(Source, succ(a), pred(b-a));
end;


Пример использования:
Код

GetLink('"http://www.afreego.com/AuthorCenter/","aFreeGo.com","" - это Mozilla'); //рез-тат http://www.afreego.com/AuthorCenter/
GetLink('"http://www.afreego.com/AuthorCenter/","aFreeGo.com","" - это Mozilla', 2); //рез-тат aFreeGo.com

и т.д.

Автор: Yanis 4.4.2007, 22:07
И всё таки почему не взять пример W4FhLF?
Я понимаю, что так сложно и трудоёмко устанавливать новый компонент. Да ещё и программа становится очень тяжеловесной. Дао не позволяет «брать то, что можешь написать сам», но всё в меру.
Раз установив компонент регулярок можно намного упростить себе программирование. Не говоря уже о меньшем количестве ошибочной обработки строк. 
С условием, что регулярное выражение составлено верно.

Добавлено @ 22:10
Между прочим, после 1.5 года, когда вы глянете в свой код, сомневаюсь что вы вспомните, что и из какой строки вытаскивает GetLink к примеру или ParsExpr.
Другое дело это регулярные выражения. Раз выучив, читать их становится легко и сразу видно, что оно делает.

Вижу смысл «всяких» вариантов только в соревновательных целях. Тагда, да, интересно посмотреть кто во что горазд.

Автор: Pavelbej 4.4.2007, 23:38
VICTAR,  спасибо! То что нужно.

Yanis,  ты о чем? Какой компонент? Ничего не понял.

И еще, раз такое дело. 

Цитата(Pavelbej @  4.4.2007,  11:38 Найти цитируемый пост)

Mozilla 
     title -  VPF::↔C6=> >BD8;LB@>20BL AB@>:          (это появляется вместо руских букв - где искать причину?)
     link -   http://forum.vingrad.ru/topic-143811.html


Куда копать?

Автор: Yanis 5.4.2007, 06:42
Цитата(Pavelbej @  5.4.2007,  00:38 Найти цитируемый пост)
Yanis,  ты о чем? Какой компонент? Ничего не понял.

Так вот оно что smile
Я о компоненте http://www.regexpstudio.com/RU/TRegExpr/TRegExpr.html.

Тебе же пример дал W4FhLF. Игнорировал?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)