Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.12.2011, 17:43
babay89 babay89 вне форума
Прохожий
 
Регистрация: 20.09.2011
Сообщения: 39
Репутация: -2571
По умолчанию Помогите с парсингом одной строки :)

Всем доброе время суток. Не получается спарсить в строке значения. Сама строка:"tmp.init('timers_prometiumCollector', 1322830122, 1322833722)". нужно соответственно спарсить число 1322830122 и 1322833722.
Кусок кода на странице:
Код:
<div id="timers_prometiumCollector"></div>
<script language="javascript">
var tmp = new SkylabTimer();
tmp.init('timers_prometiumCollector', 1322830122, 1322833722);
tmp = undefined;
</script>
Помогите плиз с парсингом. Можно регэксом(даже желательно).
Пытаюсь спарсить так:
Код:
reg.Expression:='tmp.init('+#039+'timers_prometiumCollector'+#039+', (.*?), (.*?))';
     if reg.Exec(s3) then begin
     edit1.Text:=reg.match[1];
     edit2.Text:=reg.Match[2];

Последний раз редактировалось babay89, 02.12.2011 в 17:45.
Ответить с цитированием
  #2  
Старый 02.12.2011, 18:17
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Имхо проще всего так:
1) Находим 'tmp.init' через POS.
2) Находим первую запятую после него через POS.
3) Находим вторую.
4) Выдираем текст между ними.
5) Находим третью.
6) Выдираем второе число.
Код:
k:=pos('tmp.init',s);
if (k=0) then ShowMessage('Error');//error
delete(s, 1, k+8);// длина строки tmp.init = 8, ее тоже можно удалить.
k:=pos(',',s);
if (k=0) then ShowMessage('Error');//error
delete(s,1,k)
Теперь строка начинается с N-ного числа пробелов, за которыми идут нужные числа. Далее в том же духе.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 02.12.2011 в 18:22.
Ответить с цитированием
  #3  
Старый 02.12.2011, 18:24
babay89 babay89 вне форума
Прохожий
 
Регистрация: 20.09.2011
Сообщения: 39
Репутация: -2571
По умолчанию

Цитата:
Сообщение от Bargest
Имхо проще всего так:
1) Находим 'tmp.init' через POS.
2) Находим первую запятую после него через POS.
3) Находим вторую.
4) Выдираем текст между ними.
5) Находим третью.
6) Выдираем второе число.
Код:
k:=pos('tmp.init',s);
if (k=0) then ShowMessage('Error');//error
delete(s, 1, k+8);// длина строки tmp.init = 8, ее тоже можно удалить.
k:=pos(',',s);
if (k=0) then ShowMessage('Error');//error
delete(s,1,k)
Теперь строка начинается с N-ного числа пробелов, за которыми идут нужные числа. Далее в том же духе.
Of попробуем(разобрался)
Блин, опять не работает... Просто ничего не происходит

Последний раз редактировалось babay89, 02.12.2011 в 18:33.
Ответить с цитированием
  #4  
Старый 02.12.2011, 20:18
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Ну так дописать надо. Написано же в конце: "Далее в том же духе". После кода почти в самом начале строки стоит первое число, за запятой - второе.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 03.12.2011, 09:37
babay89 babay89 вне форума
Прохожий
 
Регистрация: 20.09.2011
Сообщения: 39
Репутация: -2571
По умолчанию

Up. Помогите плиз...
Ответить с цитированием
  #6  
Старый 03.12.2011, 11:32
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Цитата:
Сообщение от babay89
Up. Помогите плиз...
Учи:
Pos
Copy
Delete
Ответить с цитированием
  #7  
Старый 03.12.2011, 13:26
babay89 babay89 вне форума
Прохожий
 
Регистрация: 20.09.2011
Сообщения: 39
Репутация: -2571
По умолчанию

Цитата:
Сообщение от m1sclick
Учи:
Pos
Copy
Delete
Писал свой парсер, слава богу умею их юзать, но тут другой случай... много кавычек и запятых... помогите разобраться.
Ответить с цитированием
  #8  
Старый 03.12.2011, 13:35
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

а нельзя ли просто найти первую запятую,взять первое число ,потом PosEx'ом найти вторую запятую от первой. и второе число взять.
а тримом пробелы убрать как вариант.
Такой примерно код: ,правда написал всё в каждой строчке чтоб наглядно было,а можно сразу без лишних переменных,буквально в три строчки весь код уместить.
Код:
Uses strUtils //подключаем PosEx
...
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
x:integer;
begin
s:=Edit1.Text;//едит1 содержит строку для парсинга
x:=Pos(''',',s)+2;//ищем позицию первой запятой с ковычкой //+2 потому что длинна ковычки и запятой-два символа
edit2.text:=Copy(s,x,posex(',',s,x)-x);//копируем с позиции X,длинной до второй запятой//
x:=PosEx(',',s,x)+1;//ищем начало ьвторого числа
Edit3.Text:=Copy(s,x,Pos(')',s)-x);
Edit2.Text:=Trim(Edit2.Text);//убираем пробелы
Edit3.Text:=Trim(Edit3.Text);
end;

Последний раз редактировалось Snake22, 03.12.2011 в 13:49.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:38.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025