![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
![]() Вариаций можно придумать много, ещё в RxLib готовые функции для этого были. Главное эффективность и простота.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#17
|
|||
|
|||
![]() А как найти "0123.45" xx в строке <a href="#nodo" onclick="page.userData.refresh(true);">0123.45 xx</a> если "0123.45 хх" это переменное значение.
|
#18
|
||||
|
||||
![]() Цитата:
Код:
ShowMessage(Copy(s, 56, Length(s) - 59)); // где s это переменная с этой строкой |
#19
|
|||
|
|||
![]() Вот этот код подходит
Код:
procedure TForm1.Button1Click(Sender: TObject); var KP, KS : Integer; S, Word : string; begin S := RichEdit1.text; KP := Pos('<a href="#nodo" onclick="page.userData.refresh(true);">', S); KS := Pos('</a>', S); while KP > 0 do begin Word := Copy(S, KP+55, KS-KP-55); ShowMessage(Word); Inc(KP); KP := PosEx('<a href="#nodo" onclick="page.userData.refresh(true);">', S, KP); Inc(KS); KS := PosEx('</a>', S, KS); if KS = 0 then KS := Length(S)+1; end; end; Код:
ShowMessage На всякий случай исходник с текстом прикрепил. |
#20
|
||||
|
||||
![]() Цитата:
Вот так будет правильнее и попроще: Код:
procedure TForm1.Button1Click(Sender: TObject); const cs1: string = '<a href="#nodo" onclick="page.userData.refresh(true);">'; cs2: string = '</a>'; var KP, KS: Integer; S, Word: string; begin S := RichEdit1.text; KP := 1; while True do begin KP := PosEx(cs1, S, KP); if KP = 0 then Break; Inc(KP, Length(cs1)); KS := PosEx(cs2, S, KP); if KS = 0 then Break; Word := Copy(S, KP, KS - KP); ShowMessage(Word); KP := KS + Length(cs2); end; end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
vbv (16.11.2012)
|
#21
|
|||
|
|||
![]() повторяющаяся тема, в целях обучения все способы хороши, даже посимвольный пробег по строке; самый краткий без регулярок, это функция, которая два раза вызывает delete; а для разнообразия можно сделать регулярками через CreateOLEObject
Код:
uses comobj; function eval(command:string; lang:string='VBScript'): string; var script: Variant; begin script := CreateOLEObject('ScriptControl'); try script.Language := lang; result := script.eval(command); // no match => error finally script := Unassigned; end; end; function match(given, regexp: string; index:integer=0): string; const script = '"%s".match(%s)[%d];'; begin given := StringReplace(given, '\', '\\', [rfReplaceAll]); given := StringReplace(given, '"', '\"', [rfReplaceAll]); given := StringReplace(given, #13#10, '\n', [rfReplaceAll]); result := eval(format(script, [given, regexp, index]), 'JScript'); end; procedure TForm1.Button4Click(Sender: TObject); begin ShowMessage('full:'#13#10+ match(given.Text, '/<a href="#nodo".*?>(.+)<\/a>/')); ShowMessage('inner:'#13#10+ match(given.Text, '/<a href="#nodo".*?>(.+)<\/a>/', 1)); ShowMessage('other:'#13#10+ match(given.Text,'/<a href="#nodo"(.*?)>.+<\/a>/', 1)); end; >woweook< |
Этот пользователь сказал Спасибо Pyro за это полезное сообщение: | ||
vbv (16.11.2012)
|
#22
|
|||
|
|||
![]() Всем спасибо за помощь! Всё получилось и отлично работает.
Выкладываю исходник клиента QIWI кошелька (может кому то пригодится), пока только проверка балланса. |
#23
|
||||
|
||||
![]() Цитата:
![]() Цитата:
Цитата:
![]() |