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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2012, 21:03   #1
foxes
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 94
По умолчанию Проблема с парсинга.

Помогите с парсить курс валют

Код:
 
 <tr>
                    <td width="26%">EUR</td>
                    <td width="9%" style="text-align:right;">10.52</td>
                    <td width="25%" style="text-align:right;">10.82</td>
                </tr>
                <tr>
                    <td width="26%">USD</td>
                    <td width="9%" style="text-align:right;">8.150</td>
                    <td width="25%" style="text-align:right;">8.180</td>
                </tr>
                <tr>
                    <td width="26%">RUB</td>
                    <td width="9%" style="text-align:right;">0.260</td>
                    <td width="25%" style="text-align:right;">0.270</td>
                </tr>
Так не могу
Код:
tmp:=IdHttp1.Get('http://privatbank.ua/');
EUR:=copy(tmp,pos('<td width="26%">EUR</td>',tmp)+16,pos('</td>',tmp)-pos('<td width="26%">EUR</td>',tmp)-16);
Edit1.Text:=EUR;
foxes вне форума Ответить с цитированием
Старый 20.10.2012, 21:54   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
uses StrUtils;
...
var
  s, EUR: string;
  p1, p2: integer;
begin
  s := IdHTTP1.Get('http://privatbank.ua/');
  p1 := pos('EUR</td>', s);
  if p1 <> 0 then
  begin
    p1 := posex(';">', s, p1);
    if p1 <> 0 then
    begin
      p2 := posex('</td>', s, p1);
      if p2 <> 0 then
      begin
        EUR := copy(s, p1 + 3, p2 - p1 - 3);
        Edit1.Text := EUR;
      end;
    end;
  end;
end;
Или
Код:
uses StrUtils;
...
function parse(s, exchange: string; var buy, sell: string): boolean;
var
  p1, p2: integer;
begin
  result := false;
  p1 := pos(exchange + '</td>', s);
  if p1 <> 0 then
  begin
    p1 := posex(';">', s, p1);
    if p1 <> 0 then
    begin
      p2 := posex('</td>', s, p1);
      if p2 <> 0 then
      begin
        buy := copy(s, p1 + 3, p2 - p1 - 3);
        p1 := posex(';">', s, p2);
        if p1 <> 0 then
        begin
          p2 := posex('</td>', s, p1);
          if p2 <> 0 then
          begin
            sell := copy(s, p1 + 3, p2 - p1 - 3);
            result := true;
          end;
        end;
      end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  b, s: string;
begin
  if parse(IdHTTP1.Get('http://privatbank.ua/'), 'USD', b, s) then
  begin
    Edit1.Text := b;
    Edit2.Text := s;
  end;
end;
Или даже
Код:
uses StrUtils;
...
function parse(s, exchange: string; buy, sell: TEdit): boolean;
var
  p1, p2: integer;
begin
  result := false;
  p1 := pos(exchange + '</td>', s);
  if p1 <> 0 then
  begin
    p1 := posex(';">', s, p1);
    if p1 <> 0 then
    begin
      p2 := posex('</td>', s, p1);
      if p2 <> 0 then
      begin
        buy.Text := copy(s, p1 + 3, p2 - p1 - 3);
        p1 := posex(';">', s, p2);
        if p1 <> 0 then
        begin
          p2 := posex('</td>', s, p1);
          if p2 <> 0 then
          begin
            sell.Text := copy(s, p1 + 3, p2 - p1 - 3);
            result := true;
          end;
        end;
      end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  parse(IdHTTP1.Get('http://privatbank.ua/'), 'USD', Edit1, Edit2);
end;
Еще можно написать регулярное выражение
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 20.10.2012 в 22:04.
BDA вне форума Ответить с цитированием
Старый 20.10.2012, 22:06   #3
foxes
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 94
По умолчанию

Большое Вам спасибо!
foxes вне форума Ответить с цитированием
Старый 20.10.2012, 22:52   #4
foxes
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 94
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:

procedure TForm1.Button1Click(Sender: TObject);
begin
  parse(IdHTTP1.Get('http://privatbank.ua/'), 'USD', Edit1, Edit2);
end;
Еще можно написать регулярное выражение
parse(IdHTTP1.Get('http://privatbank.ua/'), 'USD', Edit1, Edit2);
Все я понял
Большое Вам спасибо!
foxes вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация парсинга Lauri Общие вопросы Delphi 3 08.03.2012 14:54
Ошибки парсинга waka2ebawer PHP 2 26.02.2012 19:31
Оптимизация парсинга Lauri Общие вопросы Delphi 5 14.01.2012 00:04
ВАРИАНТЫ ПАРСИНГА Vova777 Общие вопросы Delphi 2 04.09.2010 23:51
пример парсинга Stanislav Общие вопросы Delphi 4 14.01.2008 03:48