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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2011, 19:23   #1
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию проблема с парсингом

вот код который парсит даные:
Код:
for I := 0 to memo1.Lines.Count-1 do
  begin
    bg:=posex('uid',memo1.Lines.Strings[i]);
    en:=posex(',"',memo1.Lines.Strings[i]);
    s:=copy(memo1.Lines.Strings[i],bg,en-bg);
    delete(s,bg+1,2);
    memo2.Lines.Add(s);
  end;
вот текст который парситса:

{"response":[{"uid":1,"first_name":"Павел","last _name":"Дуров","online":0},{"uid":5 ,"first_name":"Илья","last_name":"П ерекопский","online":0},{"uid":4201 2873,"first_name":"Олег","last_name ":"Саламаха","online":1}]}


вот результат роботы:
uid":1
uid5
uid42012873

вопрос: почему первая строка результата отличаетса от других?
в чем ошыбка алгоритма, как её исправить.
Pein95 вне форума Ответить с цитированием
Старый 14.07.2011, 19:49   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

а что тебе нужно вытащить из этих строк?
Человек_Борща вне форума Ответить с цитированием
Старый 14.07.2011, 19:53   #3
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Ммм... в данном случае предлагаю использовать ВЕСЬ текст мемо как строку, и не использовать цикл FOR вобще.

Простейший пример:

Код:
A:= 'a,b,c,d';


if a[length(a)]<>',' then a:=a+',';
while Pos(',',a)>0 do begin
b:=Copy(a,1,Pos(',',a)-1);
Delete(a,1,Pos(',',a));
end;
Думаю, разберетесь, хоть написано и на коленке...

Хм. Конкретный пример:
Код:
A:='{"uid":1,"first_name":"Павел","last _name":"Дуров","online":0},{"uid":5 ,"first_name":"Илья","last_name":"П ерекопский","online":0},{"uid":4201 2873,"first_name":"Олег","last_name ":"Саламаха","online":1}';

if a[length(a)]<>',' then a:=a+',';

while Pos(',',a)>0 do begin
  b:=Copy(a,1,Pos(',',a)-1);
  Delete(a,1,Pos(',',a));
  // Сдесь за каждый проход цикла будет свой раздел, например {"uid":1,"first_name":"Павел","last _name":"Дуров","online":0}
  //Обрезаете начальный и последний символы, чтоб не мешали:
  Delete(b,1,1);Setlength(b,length(b)-1);
  // Сдесь же делаете второе вложение такого же цикла и парсите уже получившуюся строку.
  // Что бы получить в нем составляющие такого вида: "uid":4201 2873
  if b[length(b)]<>',' then b:=b+',';
  while Pos(',',b)>0 do begin
    c:=Copy(b,1,Pos(',',b)-1);
    delete(c,1,Pos(',',b));
    // Тут уже зазбираете что получилось и фильтруете.
    // Вместо второго вложенного цикла можно использовать обычный парсинг, если заведомо известно количество параметров
  end;
end;
------------------------------
Добавлено:
Извиняюсь, затупил. В первом цикле запятые неприемлимы, ибо параметры разделены тоже запятыми, как и разделы.
Ищите по }
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 14.07.2011 в 20:06.
Johnson вне форума Ответить с цитированием
Старый 14.07.2011, 20:06   #4
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

ясн спс) но дело в том что ето только начало парсинга там ещо будет парситса имя и фамилия и статус онлайн будет создаватса таблица вот примерно такого типа:
uid1
Павел Дуров
1
Pein95 вне форума Ответить с цитированием
Старый 14.07.2011, 20:08   #5
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Делал я что-то подобное. Парсило 3000 френдов очень быстро... Давно было, исходников не осталось.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 14.07.2011, 20:11   #6
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

жаль( а то мой алгоритм не очень(
я просто хочу сделать статистку друзей) вот примерно каждые 3 минуты будет происходить парсинг потом на основе етих даных будет делатса анализ
Pein95 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помоги с парсингом Coobik Работа с сетью в Delphi 2 21.08.2010 08:54
Проблемы с парсингом строки kakawkin Общие вопросы Delphi 6 06.03.2010 02:06
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37