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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2009, 21:43   #1
seoanalyzer
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 13
Вопрос парсинг страницы

Вообщем столкнулся я с такой проблемой:
пишу программу которая по get запросу получает страницу такого вида
код примерно такой:

memo1.Lines.Add(idhttp1.Get('http://83.222.193.41/scripts/check.exe?tir_num=745&bil_num123456 78=&Check=submit'));

вопрос:как мне распарсить текст из мемо чтобы получить строку "Ваш
билет не выиграл."

перед этой фразой которую мне нужно получить, уникальной позицией с котрого копировать являются теги <font size="4" color="#FF0000"><b>, но теги </b></font>не являются уникальными и в тексте встречаются выше.

Особо в алгоритмы pos и copy не вдавался, буду очень благодарен если напишете код как это сделать.
seoanalyzer вне форума Ответить с цитированием
Старый 11.02.2009, 21:47   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

использовать функции pos и copy к сетям этот вопрос не имеет никакого отношения
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 12.02.2009, 06:00   #3
Nemez
Пользователь
 
Аватар для Nemez
 
Регистрация: 11.02.2008
Сообщений: 69
По умолчанию

//// функция возвращает номер позиции искомой строки
Код:
function BMSearch(StartPos: Integer; const S, P: string): Integer;
type
  TBMTable = array[0..255] of Integer;
var
  Pos, lp, i: Integer;
  BMT: TBMTable;
begin
  for i := 0 to 255 do
    BMT[i] := Length(P);
  for i := Length(P) downto 1 do
    if BMT[Byte(P[i])] = Length(P) then
      BMT[Byte(P[i])] := Length(P) - i;
  lp := Length(P);
  Pos := StartPos + lp - 1;
  while Pos <= Length(S) do
    if P[lp] <> S[Pos] then
      Pos := Pos + BMT[Byte(S[Pos])]
    else if lp = 1 then
    begin
      Result := Pos;
      Exit;
    end
    else
      for i := lp - 1 downto 1 do
        if P[i] <> S[Pos - lp + i] then
        begin
          Inc(Pos);
          Break;
        end
        else if i = 1 then
        begin
          Result := Pos - lp + 1;
          Exit;
        end;
  Result := 0;
end;
/////
var
  k,k1:integer;
  bilet:string;
begin
k:=BMSearch(1, memo1.Text, '<font size="4" color="#FF0000"><b>')+34;
k1:=BMSearch(k, memo1.Text, '</b></font>');
bilet:=copy(memo1.Text,k,k1-k);// это и будет твоя строка
end
Nemez вне форума Ответить с цитированием
Старый 13.02.2009, 12:50   #4
seoanalyzer
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 13
По умолчанию

Спасибо, Nemez. Хороший алгоритм, работает.
seoanalyzer вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг HTML страницы OkeaH Работа с сетью в Delphi 1 19.01.2009 09:17
HTML Парсинг BaikalLord Помощь студентам 5 15.12.2008 08:20
Парсинг INI-файла lyonmik Общие вопросы .NET 2 23.04.2008 19:21
Как сделать разрыв страницы печати по условию и узнать номер страницы Leanna Microsoft Office Excel 2 21.01.2008 06:59