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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2016, 21:33   #1
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию while pos

Добрый день!
Помогите распарсить блок

Код:
		<tr class="one">
			<td><a href="/player/menendez-maceiras/?annual=2016" class="bold">2016</a></td>
			<td class="bold">23/20</td>
			<td><a href="/player/menendez-maceiras/?annual=2016&amp;surface=2" class="bold">4/7</a></td>
			<td><a href="/player/menendez-maceiras/?annual=2016&amp;surface=4" class="bold">15/7</a></td>
			<td><a href="/player/menendez-maceiras/?annual=2016&amp;surface=1" class="bold">1/2</a></td>
			<td><a href="/player/menendez-maceiras/?annual=2016&amp;surface=3" class="bold">3/4</a></td>
			<td>-</td>
		</tr>
Код:
          sPos := Pos('<tr', code);
          while sPos > 0 do
          begin
            sPos2 := PosEx('<td>', code, sPos + 1);
            spisok := spisok + Copy(code, sPos - 4, sPos2 - sPos) + '</td>';
            sPos := PosEx('<tr', code, sPos2);
          end;
парсит вот так:

Цитата:
<tr class="one">
</td>>
<tr class="two"></td>>
<tr class="one"></td>>
<tr class="two"></td>>
<tr class="one"></td>>
<tr class="two"></td>>
<tr class="one"></td>>
<tr class="two"></td>>
<tr class="one"></td>
nibufep вне форума Ответить с цитированием
Старый 22.07.2016, 23:40   #2
Igor[Игорь]
Пользователь
 
Аватар для Igor[Игорь]
 
Регистрация: 25.11.2011
Сообщений: 52
По умолчанию

Код:
procedure Find(StrSrc: string; Str1, Str2: string; List: TStrings);
var
  StrTmp: string;
  Pos1, Pos2, Len1, Len2: Integer;
  l: integer;
begin
  List.Clear;

//  Str1 := '<td>';
  // крайние левые теги для поиска
  Len1 := Length(Str1);
//  Str2 := '</td>';
  // крайние правые теги для поиска
  Len2 := Length(Str2);

  Pos1 := posEx(Str1, StrSrc, 1);

  // поиск всех записей на странице, находящихся между тегами Str1 и Str2
  while Pos1 > 0 do
  begin
    Pos2 := posEx(Str2, StrSrc, Pos1 + Len1);
    if Pos2 = 0 then
    break;
    StrTmp := Copy(StrSrc, Pos1 + Len1, Pos2 - Pos1 - Len1);
    StrTmp := Trim(StrTmp);

    l:=length(StrTmp);
    List.Add(StrTmp);

    Pos1 := Pos2 + Len2;
    Pos1 := posEx(Str1, StrSrc, Pos1);
  end;
end;
e-mail: igor23dec@yandex.ru , ICQ: 2168364 , Telegram: @IgorVN
Delphi, PHP
Примеры http://igorvn.ucoz.ru/
Igor[Игорь] вне форума Ответить с цитированием
Старый 22.07.2016, 23:47   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

А мож нинада, а? Добрые дяди за тебя всё сделали уже.

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зациклить Pos() Лера22 Общие вопросы Delphi 7 17.11.2012 14:14
if not Pos Shouldercannon Общие вопросы Delphi 9 01.02.2012 15:48
Функия POS propoker23 Общие вопросы Delphi 2 18.01.2012 01:13
Copy и pos Zloy_Doomer Общие вопросы Delphi 8 03.07.2011 06:13