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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2010, 17:31   #1
Univerce =)
Новичок
Джуниор
 
Регистрация: 10.01.2010
Сообщений: 9
По умолчанию выташить ссылки, работа с текстом

Привет, такая проблема, программа получает в мемо текст, в нем куча ссылок смешанных с тектстом, нужно вытащить все ссылки тоесть начиная с http:// и до следующего после текста ссылки пробела.


вот как думаю я, но она не работает почему, не пойму.
PHP код:
linkB:=Pos('http:/',tekst);//начало искомого
linkE:=Pos(' ',Source);//конец искомого
С:=Copy(tekstlinkBlinkB-linkE);//выдераем 

Последний раз редактировалось Univerce =); 10.01.2010 в 17:35.
Univerce =) вне форума Ответить с цитированием
Старый 10.01.2010, 17:56   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
function ParseLinksFromText(Text:string):TStringList;
var i:integer;
begin
 Text:=ANSILowerCase(Text);
 Result:=TStringList.Create;
 i:=PosEx('http:/',Text);
 while i<>0 do
  begin
   Result.Add(Copy(Text,i,i-PosEx(' ',Text,i)));
   i:=PosEx('http:/',Text,i+1);
  end;
end;
вроде так...не проверял
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.01.2010, 18:17   #3
Univerce =)
Новичок
Джуниор
 
Регистрация: 10.01.2010
Сообщений: 9
По умолчанию

немного переделал код, но выдирается только первая ссылка и дальше прога не идет.

Код:
Source:=ANSILowerCase(Source);
 i:=Pos('http',Source);
 istop:=0;
 repeat
  begin
   istop:=istop+1;
   res:='';
   res:=(Copy(Source,i,i-Pos(' ',Source)));
   i:=Pos('http://',Source);
  end;
  until istop=50;
Univerce =) вне форума Ответить с цитированием
Старый 10.01.2010, 18:23   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Используйте не POS, а POSEX. Описание - тоже в хэлпе.
mihali4 вне форума Ответить с цитированием
Старый 10.01.2010, 18:28   #5
Univerce =)
Новичок
Джуниор
 
Регистрация: 10.01.2010
Сообщений: 9
По умолчанию

у меня ругается на posEX
пишет не обьявленый идентификатор
Univerce =) вне форума Ответить с цитированием
Старый 10.01.2010, 19:34   #6
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Забыл подключить модуль StrUtils, вот и ошибка из-за этого...
W0LF вне форума Ответить с цитированием
Старый 10.01.2010, 23:36   #7
Univerce =)
Новичок
Джуниор
 
Регистрация: 10.01.2010
Сообщений: 9
По умолчанию

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

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
function ParseLinksFromText(Text:string):TStringList;
var i:integer;
begin
 Text:=ANSILowerCase(Text);
 Result:=TStringList.Create;
 i:=PosEx('http:/',Text);
 while i<>0 do
  begin
   Result.Add(Copy(Text,i,i-PosEx(' ',Text,i)));
   i:=PosEx('http:/',Text,i+1);
  end;
end;
вроде так...не проверял
к сожалению виснет код =(
Univerce =) вне форума Ответить с цитированием
Старый 10.01.2010, 23:44   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
function ParseLinksFromText(Text:string):TStringList;
var i,j:integer;
begin
 Text:=ANSILowerCase(Text);
 Result:=TStringList.Create;
 i:=Pos('http:/',Text);
 while i<>0 do
  begin
   Delete(Text,1,i-1);
   j:=Pos(' ',Text)-1;
   if j=0 then j:=Length(Text);
   Result.Add(Copy(Text,1,j));
   Delete(Text,1,j);
   i:=Pos('http:/',Text);
  end;
end;
а если так?(просто Делфи нет на этой машине)
(ЗЫ, если ссылки обрезает на один символ то жирное убрать)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 10.01.2010 в 23:47. Причина: подправил
Пепел Феникса вне форума Ответить с цитированием
Старый 10.01.2010, 23:55   #9
Univerce =)
Новичок
Джуниор
 
Регистрация: 10.01.2010
Сообщений: 9
По умолчанию

не работает =( и сильно подвешивает систему, на 99% =)

Я думаю сделать условие, если текст не найден то i:=1, и задать цикл чтобы программа искала и вырезала ссылки из текста, если ссылки не найдены i:=0 как программно это выразить не знаю =(
Univerce =) вне форума Ответить с цитированием
Старый 11.01.2010, 11:06   #10
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

чего изобретать велосипед? используйте библиотеку RegExp
Usov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстом severin Помощь студентам 1 08.11.2009 17:06
Работа с текстом!!! elf80 Microsoft Office Excel 2 24.09.2009 09:54
работа с текстом... Poll Помощь студентам 5 23.01.2009 11:43
Работа с текстом(C++) silent_witcher Помощь студентам 1 13.12.2008 17:55