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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2010, 10:53   #1
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию Несколько вхождений

Работаю я с html кодом.
Нужно пропарсить страницу.
Необходимо заполнить массив значений (15 значений).
Строки, которые необходимо найти:
Код:
<input type="checkbox" name="post[]" value="118" />
Нужен мне тут "118"
Вот таких строчек (с разным значением) всего на странице 15.
функция Pos дает номер символа только первого вхождения
Код:
Pos('<input type="checkbox" name="post[]" value="', megstr)
Пробовал в цикле, что-то типа:
Код:
procedure TForm1.FormShow(Sender: TObject); // пробная прога, поэтому засунул все в ФормШоу(сразу после компиляции)
var
  i, plus: integer;
  megstr: string;
begin
  plus:= 14000; // приблизительно отсюда начинаются нужные мне значения
  Memo1.Lines.LoadFromFile('file.txt'); // загружаю весь html в memo1
  str := Memo1.Text;
  for i := 0 to 15 do // мне нужно 15 элементов
  begin
  megstr:= copy(str, plus, 2400); // приблизительно через такое кол-во символов нужные мне элементы повторяются
  if Pos('<input type="checkbox" name="post[]" value="', megstr)>0 then
    Memo2.Lines.Add(Copy(megstr, Pos('<input type="checkbox" name="post[]" value="', megstr) + Length('<input type="checkbox" name="post[]" value="'), 3) );
  plus:= plus + 2400;
  end;
end;
Но вот возникла проблема: т.к. генерируется код в зависимости от исходных данных, то расстояние (2400 выбрано сейчас) может быть разным, а следовательно начинаются сдвиги и могут пропарсится не все значения.
0_o
MyIE вне форума Ответить с цитированием
Старый 15.06.2010, 10:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых: В Делфи постарше есть функция РosEx
Во-вторых: Никто тебе не мешает после того как нашел первое вхождение удалить из строки все до этого вхождения и его вместе, и опять искать через Pos.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.06.2010, 15:54   #3
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Спасибо за ответ, остановился на PosEx
0_o
MyIE вне форума Ответить с цитированием
Старый 15.06.2010, 15:56   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Виталий, все таки PosEx(если у ТС нет её в Д, то скинуть могу) лучше, Delete скорость уронит...
http://programmersforum.ru/showpost....6&postcount=17
вон там пример парсера ссылок на музыку в контакте(из поиска)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.06.2010, 16:06   #5
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Спс, код уже не нужен, я только алгоритм спрашивал) Функцию я уже сам реализовал под свои нужны подстроенную ^^
0_o
MyIE вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
число вхождений в последовательность robert19 Общие вопросы C/C++ 4 02.06.2010 09:21
программа ассоциативного поиска вхождений слов Тант Зин Помощь студентам 0 26.05.2010 14:37
программа ассоциативного поиска вхождений слов Тант Зин Помощь студентам 0 11.05.2010 12:18
Найти кол-во вхождений подстроки в строку Kuzya59 Общие вопросы Delphi 4 21.09.2009 12:46
Подсчитать кол-во вхождений символа Си++ Alexion124 Помощь студентам 9 05.01.2009 00:03