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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2016, 13:29   #1
nikolokaputik80
Пользователь
 
Регистрация: 30.09.2015
Сообщений: 74
По умолчанию Как программой выдернуть все ссылки с текстовика

Нужно вытащить ссылки с моего text.txt файла весом 100 мб

нужна программа способная выдернуть из текстовика все содержащиеся в нем ссылки
по такой маске

начало поиска http://
конец поиска /">

прога находит ссылку в файле
http://www.domen.com/">

и на выходе в текстовик сохраняет в виде
www.domen.com

в текстовике куча текста и другой лабуды
вот пример





Код HTML:
<ExternalPage about="http://www.domen.com/">
    <topic>тут текст тут текст тут текст тут текст тут текст </topic>
  </ExternalPage>
  <ExternalPage about="http://www.domen.com/">

    <d:Description>тут текст тут текст тут текст тут текст тут текст .</d:Description>
    <topic>тут текст тут текст тут текст тут текст тут текст </topic>
  </ExternalPage>
  <ExternalPage about="http://www.domen.co.uk/">

    <d:Description>тут текст тут текст тут текст тут текст тут текст </d:Description>
    <topic>тут текст тут текст тут текст тут текст тут текст </topic>
  </ExternalPage>
  <ExternalPage about="http://domen.com/">
    <link r:resource="http://domen.com/"></link>
    <link r:resource="http://www.domen.com/"></link>
    <link r:resource="http://www.domen.co.nz/"></link>
    <link r:resource="http://www.domen.com/"></link>
    <link r:resource="http://www.domen.com/"></link>

Спасибо, надеюсь что может кто поделится такой прогой!
nikolokaputik80 вне форума Ответить с цитированием
Старый 17.05.2016, 14:37   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
const
  strartpos='http://';
  stoppos='/">';

k:=1;
list:=TstringList.Create;
list.LoadFromFile(.........);
txt:=list.text;
list.clear;
while k>0 do begin
  k:=PosEx(startpos, txt, k);
  if k>0 then k1:=PosEx(stoppos, txt, k +length(startpos)) else k:=0;
  if (k>0) and (k1>0) then begin
    r:=copy(txt, k +length(startpos), k1-k-length(startpos) );
    list.add(r);
    k:=k1 +length(stoppos);
  end
  else
    k:=0;
end;
list.SavetoFile(......);  
list.Free;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 17.05.2016 в 14:45.
evg_m вне форума Ответить с цитированием
Старый 17.05.2016, 15:15   #3
greenisius
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 67
По умолчанию

Код:
function IsolateText( Const S: String; Tag1, Tag2: string): string;
var pScan, pEnd, pTag1, pTag2: PChar; foundText: String;searchtext: String;
begin
  foundText:='';
  searchtext := Uppercase(S);
  Tag1:= Uppercase( Tag1 );
  Tag2:= Uppercase( Tag2 );
  pTag1:= PChar(Tag1);
  pTag2:= PChar(Tag2);
  pScan:= PChar(searchtext);

  pScan:= StrPos( pScan, pTag1 );
  if pScan <> Nil then
  begin
   Inc(pScan, Length( Tag1 ));
    pEnd := StrPos( pScan, pTag2 );
    If pEnd <> Nil then
       begin
        SetString( foundText, Pchar(S) + (pScan- PChar(searchtext) ), pEnd - pScan );
       IsolateText := foundText;
        pScan := pEnd + Length(tag2);
       end;
  end;
 if foundText = '' then IsolateText := '';
end;


function IsolateText( Const S: String; Tag1, Tag2: string): string;

var
  cookiebool: boolean;
  TempStringList: TStringList;
  Loaded: Boolean;

implementation

function IsolateList( Const S: String; Tag1, Tag2: String; list: TStrings ): bool;
var pScan, pEnd, pTag1, pTag2: PChar; foundText: String;searchtext: String;
begin
  searchtext := Uppercase(S);
  Tag1:= Uppercase( Tag1 );
  Tag2:= Uppercase( Tag2 );
  pTag1:= PChar(Tag1);
  pTag2:= PChar(Tag2);
  pScan:= PChar(searchtext);
  repeat

  pScan:= StrPos( pScan, pTag1 );
  if pScan <> Nil then
  begin
    Inc(pScan, Length( Tag1 ));
    pEnd := StrPos( pScan, pTag2 );
    If pEnd <> Nil then
    begin
      SetString( foundText,
      Pchar(S) + (pScan- PChar(searchtext) ),
      pEnd - pScan );
      list.Add( foundText );
      pScan := pEnd + Length(tag2);
  end
  else
    pScan := Nil;
  end;
  Until pScan = Nil;
end;
В свое время позаимствовал эти функции у человека, сейчас передаю тебе.

Первая - находит в строке содержимое между двумя тегами и возвращает. Вторая возвращает список со всеми совпадениями

Код:
IsolateText(MoyaStroka, 'http://', '"');
greenisius вне форума Ответить с цитированием
Старый 17.05.2016, 15:54   #4
nikolokaputik80
Пользователь
 
Регистрация: 30.09.2015
Сообщений: 74
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
const
  strartpos='http://';
  stoppos='/">';

k:=1;
list:=TstringList.Create;
list.LoadFromFile(.........);
txt:=list.text;
list.clear;
while k>0 do begin
  k:=PosEx(startpos, txt, k);
  if k>0 then k1:=PosEx(stoppos, txt, k +length(startpos)) else k:=0;
  if (k>0) and (k1>0) then begin
    r:=copy(txt, k +length(startpos), k1-k-length(startpos) );
    list.add(r);
    k:=k1 +length(stoppos);
  end
  else
    k:=0;
end;
list.SavetoFile(......);  
list.Free;


Спасибо!
если не трудно можете скомпилировать в .exe?
nikolokaputik80 вне форума Ответить с цитированием
Старый 17.05.2016, 16:12   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
если не трудно можете скомпилировать в .exe?
Так не делается. То же пример кода и не отлаженный, его дорабатывать нужно - не заданы имена входного и выходного файлов, не предусмотрена обработка исключений ввода/вывода, мало ли что может случится в процессе работы проги, начиная с недостатка прав и вплоть до сбойных секторов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.05.2016, 17:16   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Аватар прав. Дьявол, как обычно, в деталях..

Ну, в качестве попытки помочь.
Вот скомпилированный по коду evg_m exe-шник: ExtractDomens_exe.rar
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.05.2016, 17:20   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

мне почему то кажется что ТС нужна именно программа, а на чем она ему пофиг.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.05.2016, 17:28   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Пепел Феникса, да это понятно, что ему только программа и нужна.
но речь о другом.
1) интерфейс. Кто и как будет задавать входной и выходной файлы,
настройки селекта, игнорировать дубликаты или нет, прогресс-бар о результатах выполнения и т.п.

2) более важно отслеживание разнообразнейших ошибок, которые могут возникать при выполнении программы.

А вот если всё это неважно, то можно "программа" для TС уже выложена.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.05.2016, 18:13   #9
nikolokaputik80
Пользователь
 
Регистрация: 30.09.2015
Сообщений: 74
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Аватар прав. Дьявол, как обычно, в деталях..

Ну, в качестве попытки помочь.
Вот скомпилированный по коду evg_m exe-шник: Вложение 81684

Спасибо!
да мне нужна была такая программа, может кому-то тут требовалось
выдрать все ссылки с текстовика!

в данном примере .exe
скомпилированная программа вырвала из моего .txt файла только
1600 линков

на самом деле в этом текстовике
98000 линков

проверял я это в notepad
банальной проверкой
типа

что заменить
http://

и на что заменить
http://


замен 98000

так что это прога вырвала 2% ссылок






у меня в текстовике ссылки могут находится где угодно в тексте
но у всех их одно общее

http://www.domen.co.uk/">

регулярка начала поиска
http://
без www. иначе может не все ссылки увидеть
именно
http://


и конец поиска
/">





я глянул на код

strartpos='http://';
stoppos='/">';


вот и попросил скомпилировать, но увы не работает почему-то!
может кто подскажет как выдрать ссылки другим способом?
nikolokaputik80 вне форума Ответить с цитированием
Старый 17.05.2016, 18:16   #10
nikolokaputik80
Пользователь
 
Регистрация: 30.09.2015
Сообщений: 74
По умолчанию

чистить от дублей мне не нужно, нужно просто выдрать все что между

регулярка начала поиска
http://

и конец поиска
/">
nikolokaputik80 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить все ссылки сразу из всех документов? Karyuudo Microsoft Office Word 0 19.11.2012 14:53
Как автоматически активировать все ссылки в тексте документа? imeverest Microsoft Office Word 2 08.09.2012 14:44
Как составить регулярные выражения которые будет искать все ссылки на странице? melihovgv PHP 4 10.12.2011 16:56
Как найти все ссылки на странице, начинающееся с... codermoder Работа с сетью в Delphi 6 11.02.2011 10:24
Как можно отбразить все ссылки сайт в проге eldar Работа с сетью в Delphi 2 28.09.2008 12:19