Нужна функция парсера от конца до начала, а никак многие от начала до конца что то вроде Downto('<a>',memo1.text,'<td>')
PHP: varmylist:TStringList; //Переменная под список для парсингаi,k:integer;s:string;beginmylist:=TStringList.Create; //инициализируем списокmylist.Add('<a>1111111111111<td>'); // заполняемmylist.Add('<a>2222222222222<td>'); // списокmylist.Add('<a>3333333333333<td>'); // для примераfor i:=mylist.count-1 downto 0 do // обратный цикл от количества строк-1 до 0 begin s:=mylist.Strings[i]; // во временную переменную заносим текущую строку Delete(s,1,3); // удаляем первые 3 символа, у нас это <a> k:=pos('<td>',s); // ищем позицию <td> Delete(s,k,4); // удаляем 4 символа, начиная с начала расположения <td> Memo1.Lines.Add(s); // добавляем очищенную строку в Memo end;end;
Спасибо, а что скажешь если вот так: Code: function Pars(T_, ForS, _T: string): string; var a, b,iu: integer; begin Result := ''; for iu:=Length(ForS)-1 downto 0 do begin if (T_ = '') or (ForS = '') or (_T = '') then Exit; a := Pos(T_, ForS); if a = 0 then Exit else a := a + Length(T_); ForS := Copy(ForS, a, Length(ForS) - a + 1); b := Pos(_T, ForS); if b > 0 then Result := Copy(ForS, 1, b - 1); end; end; Правильно ли так будет ?
Не правильно. В параметрах ты передаешь строку, цикл вообще бесполезен. Поэтому возникает несколько вопросов: 1. Начнем с того, какие параметры ты хочешь передавать в функцию? T_, ForS, _T ни о чем не говорят. 2. В каком виде и откуда данные будут подаваться 3. Что ты хочешь иметь на выходе
1. Здесь передаётся так: от,исх код страницы, до 2. Данные из string 3. На выходе будет резка от включительно и до и остаются данные которые хочу спарсить Вот поэтому нужен хороший парсер так как данные первые этот не хватает, только со вторых
Вот например: uses httpsend; Code: function Pars(T_, ForS, _T: string): string; var a, b,iu: integer; begin Result := ''; for iu:=0 to Length(ForS) do begin if (T_ = '') or (ForS = '') or (_T = '') then Exit; a := Pos(T_, ForS); if a = 0 then Exit else a := a + Length(T_); ForS := Copy(ForS, a, Length(ForS) - a + 1); b := Pos(_T, ForS); if b > 0 then Result := Copy(ForS, 1, b - 1); end; end; procedure ishodniykod; var list:tstringlist; begin list:=tstringlist.create; HttpGetText('http://forum.antichat.ru', list); list.text:=(Pars('text-align:left;',list.text ,'</td>')); Showmessage(list.strings[1]); Всё таки от for iu:=0 to Length(ForS) do begin толк есть так как без него я всегда получаю только одну первую строку
Потом маленький вопрос у меня Chromium1.Browser.GetMainFrame.ExecuteJavaScript('text:input', ?,?); что обозначают данные параметры после text:input помеченные ?
За названия переменных типа T_ и _T надо бить. Ногами. Даже если код предназначен для самого себя через 3 года ты нихера не поймешь что это такое и придется раздупляться. Код может быть только для примера но хорошая привычка она всегда пригодится. Этот код берет полностью текст сайтенга и ищет "вперед" при помощи pos. Вполне логичное решение. Если нужно искать с конца - есть функция SearchBuf. Она позволяет искать и в ту и в другую сторону. Но хорошей практикой считается все-таки разбиение структуры HTML. Так легче парсить потом (но для парсера на коленке - вполне сойдет и так).
Да... погуглил тут. Не знаю я такого компонента. Не моя специальность Ты вот что. У тебя где-то в Delphi можно посмотреть хидер. Может быть нужно нажать альт или контрол и навести крысой на этот метод. Там должно подчеркивание появиться. Нажимаешь - и у тебя описание чего туда вставлять. Если сам не разрулишь - пости что там. Должен быть вполне осмысленный текст. Из того что видел - второй параметр был "about:blank" что намекает на веб-страницу (возможно ошибки) а третий NULL все-таки.
А ДА ! Главное чуть не забыл. Если хочешь писать парсеры - открой для себя "регулярные выражения" (не знаю какие юзать под Delphi) иначе ждет тебя много попоболи.
в чем проблема то? у меня на продажу есть библиотека .dll / модуль .pas/ с около 70 лучших функций для Delphi для работы с системой, интернетом, парсингом, клавиатурой, мышью, экраном и т.д., все разбито по разным классам для удобства, создание классов не требуется для вызова функций, оч. удобно все и для новичков и для профи. вот из модуля функция парсинга без регулярок: А когда строку спарсил просто ее переворачиваешь такой функцией: функции добавь в код и пиши Code: memo1.text:=ReverseStr( textsearch(memo1.text,'<a>','<td>'));
StrUtils? если бы..там нет функций парсинга.. ну reverse есть . это не из модуля функция) из модуля только первая.