Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.01.2011, 16:47
hugolom hugolom вне форума
Новичок
 
Регистрация: 25.04.2010
Сообщения: 99
Репутация: 9
По умолчанию Проблема с парсингом

Не получается спарсить текст такого вида:
Код:
<td align="right"><span class="arial">Country code:</span></td>
                RU (RUS)</td>
нужно выдрать RU (RUS)

Пробовал по разному, а так сайт:http://geoiptool.com/?IP=
Ответить с цитированием
  #2  
Старый 13.01.2011, 18:39
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Функции работы со строками

Pos - поиск подстроки в строке
Copy - копирование символов из строки
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #3  
Старый 13.01.2011, 19:10
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вообще, представленный код (html) некорректный или неполный.
Если код корректный, то можно воспользоваться парсером от Microsoft и тогда получить вирутальное дерево, в котором и искать нужную информацию.

А так, можно по быстрому попробовать следующим образом:
Код:
const
  sBeg = '<td align="right"><span class="arial">Country code:</span></td';
  sEnd = '</td>';
var
  iStart, iEnd : Integer;
  sSrc, sTgt : String;
begin
  sSrc := idHTTP.Get(...); // как ты получаешь страничку

  iStart := Pos(sBeg,sSrc) + Length(sBeg);
  iEnd := PosEx(sEnd,sSrc,iStart)-1;
  sTgt := Copy(sSrc,iStart,iStart-iEnd);
Ответить с цитированием
  #4  
Старый 13.01.2011, 21:27
hugolom hugolom вне форума
Новичок
 
Регистрация: 25.04.2010
Сообщения: 99
Репутация: 9
По умолчанию

delphi 7, на PosEx ругается..
Взял функцию
Код:
Function PosEx(Const SubStr, S: String; Offset: Cardinal = 1): Integer;

var

 I,X: Integer;

 Len, LenSubStr: Integer;

begin

 If Offset = 1 Then

  Result := Pos(SubStr, S)

 Else

 begin

  I := Offset;

  LenSubStr := Length(SubStr);

  Len := Length(S) - LenSubStr + 1;

  While I <= Len Do

  begin

  If S[i] = SubStr[1] Then

  begin

  X := 1;

  While (X < LenSubStr) And (S[I + X] = SubStr[X + 1]) Do

  Inc(X);

  If (X = LenSubStr) Then

  begin

  Result := I;

  Exit;

  End;

  End;

  Inc(I);

  End;

  Result := 0;

 End;

End;

Не сработало..
Ответить с цитированием
  #5  
Старый 13.01.2011, 21:28
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Подключи модуль StrUtils.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #6  
Старый 14.01.2011, 13:43
hugolom hugolom вне форума
Новичок
 
Регистрация: 25.04.2010
Сообщения: 99
Репутация: 9
По умолчанию

Ничего не спарсилось вообще.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,strutils, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 const
  sBeg = '<td align="right"><span class="arial">Country code:</span></td';
  sEnd = '</td>';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  iStart, iEnd : Integer;
  sSrc, sTgt : String;
begin
  sSrc := idHTTP1.Get('http://geoiptool.com/?IP=95.52.112.168'); // êàê òû ïîëó÷àåøü ñòðàíè÷êó

  iStart := Pos(sBeg,sSrc) + Length(sBeg);
  iEnd := PosEx(sEnd,sSrc,iStart)-1;
  sTgt := Copy(sSrc,iStart,iStart-iEnd);
    memo1.lines.add(sTgt);
end;

end.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:10.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025