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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2017, 12:25   #1
Maxim223
Пользователь
 
Регистрация: 30.09.2013
Сообщений: 19
По умолчанию Парсинг для новичка

Уже делал парсинг в Delphi, но забыл как это делается. Если не затруднит - подскажите пожалуйста.

Есть memo, в нем запись:

<h2 class="text-primary"><span itemprop="price">4 000</span>
<span itemprop="priceCurrency">

Как выдернуть отсюда, например, в Label цифру 4000. В коде после 4 идет пробел, его тоже нужно убрать.

Можно простой код? Заранее спасибо!
Maxim223 вне форума Ответить с цитированием
Старый 11.12.2017, 12:35   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Взять HTML/XML парсер и использовать XPath, CSS селекторы и т.п.

Желательно перед этим выкинуть Дельфи и взять нормальный язык, где нет проблем с поиском и подключением (см. пакетный менеджер) библиотек.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.12.2017, 12:36   #3
Maxim223
Пользователь
 
Регистрация: 30.09.2013
Сообщений: 19
По умолчанию

Нужен Pos или PosEX. И именно в Delphi.
Maxim223 вне форума Ответить с цитированием
Старый 11.12.2017, 12:41   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Ну, например, так

Код:
p := pos('</span>', s);
if p > 0 then 
begin
  i := p - 1;
  s1 := '';
  while s[i] <> '>' do
    if s[i] <> ' ' then
      s1 := s[i] + s1;
end;
или так:

Код:
p := pos('<span', s);
i := p;
while s[i] <> '>' do inc(i);
inc(i);
s1 := '';
while s[i] <> '<' do
  if s[i] <> ' ' then
    s1 := s1 + s[i];
или ещё так:

Код:
p := pos('</span', s);
Delete(s, p, length(s) - p + 1);
p := pos ('">',  s);
Delete(s, 1, p + 2);
StringReplace(s, ' ', '', [rfReplaceAll]);
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 11.12.2017, 12:44   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Maxim223 Посмотреть сообщение
Нужен Pos или PosEX.
ну так смотрите какие у них параметры.
Но это плохой и сложный способ парсинга HTML, даже хуже regexp.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.12.2017, 01:48   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от Maxim223 Посмотреть сообщение
Уже делал парсинг в Delphi, но забыл как это делается.
Цитата:
Сообщение от Maxim223 Посмотреть сообщение
Нужен Pos или PosEX. И именно в Delphi.
Если вы пишете код собирая говно надыбанное из интернета, то рекомендую вам сохранять эти исходники на всю оставшуюся жизнь. Вам же легче будет!
Хотя кому я говорю про легче?
northener вне форума Ответить с цитированием
Старый 08.06.2023, 14:37   #7
unreal2x
Пользователь
 
Аватар для unreal2x
 
Регистрация: 22.01.2012
Сообщений: 39
По умолчанию

Всем привет. Нужна помощь... чет не разобрался.
Нужно получить любое кол-во (может один быть... может образно говоря 1000) разного любого текста между сепаратором Version.

Есть файл с текстом:
Цитата:
Version : 1.0
тут любой текст разный
Title : Tra-ta-ta
Text : Tra-ta-ta
все еще любой текст
Version : 1.0
тут любой текст разный
Text : Tra-ta-ta
все еще любой текст
Version : 1.0
тут любой текст разный
Title : Tra-ta-ta
Mod : Tra-ta-ta
все еще любой текст
Я пробую вот так... и чета фигня какая то.
Код:
var
i,j:integer;
SL: TStringList;
begin
j:=0;

SL:=TStringList.Create;
SL.LoadFromFile(form1.OpenDialog1.FileName);
SL.Add('Version');

for i:=0 to SL.Count-1 do
  begin

    if pos('Version',SL.Strings[i]) > 0 then
    begin

    showmessage(pars(SL.Strings[j],SL.Text,SL.Strings[i]));
    end;

  j:=i;
  end;

SL.Free;
end;
no sleep.

Последний раз редактировалось unreal2x; 09.06.2023 в 00:37.
unreal2x вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Литература для новичка Ann83 Общие вопросы C/C++ 1 02.04.2013 23:18
Для новичка Дэнис Помощь студентам 4 25.05.2012 00:12
Литература для новичка bumer7721 Общие вопросы по Java, Java SE, Kotlin 6 06.12.2011 20:02
работа для новичка kermit Свободное общение 7 15.12.2008 14:46
Ассемблер для УУМ/ДС - что есть для новичка tonich Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 30.06.2008 21:54