![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день. Помогите решить проблемку.
Имеется файл с данными, из которого, необходимо взять значения и поместить результаты в ListView с колонками. У меня получается только спарсить одно значение и поместить в первую колонку. Вопрос как сделать, что бы достать все значения и заполнить ListView? Пример того, что есть сейчас test.rar Расскажите пожалуйста. ![]() |
#2
|
||||
|
||||
![]() Я так понял, что 12.test это тот самый файл который надо парсить?
Тогда вот вам вопросы: 1. В нем содержится одна запись или несколько? 2. Если одна, то что является разделителем записей? 3. Длина записей одинакова или нет? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Да его
1. Он меняется, записей в нем много. 2. Разделители это запятая. 3. У каждой записи есть значение, формат такой Код:
"data": "13.09.13" , "Следующее значение": "значение", и так далее Код:
"": Последний раз редактировалось Elza, 13.09.2013 в 13:18. |
#4
|
||||
|
||||
![]() В тему срочно призывается M.A.D.M.A.N.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение: | ||
Uniq! (13.09.2013)
|
#5
|
||||
|
||||
![]() — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#6
|
|||
|
|||
![]() ![]() |
#7
|
||||
|
||||
![]() Цитата:
Весь день дома не было. Увидел тему, не успел крикнуть, что нужно использовать RegExp ![]() Для старта |
#8
|
|||
|
|||
![]() Цитата:
спасибо, читаю, но пока не смогла разобраться, посмотрим, что дальше будет |
#9
|
||||
|
||||
![]() Идея простая:
1) у вас "однотипные строки" 2) собираем на языке "выражений" одну из этих строк (я в этом слабоват, но попробую): Код:
// добавляем uses RegularExpressions; procedure TForm1.Button1Click(Sender: TObject); var RegExp: TRegEx; // класс регулярок Match: TMatch; // массив совпадений pattern: string; begin // здесь шаблон, под который делфа будет // пытаться подставлять ваши строки // символика \d [0-9] Цифровой символ. // {n} - n символов (типа, те что стоят перед самими скобками). // в круглые скобки заключено то, что будет возвращаться в масси Matches - совпадения // (то, что вам нужно) // "data": "13.09.13" , "Следующее значение": "значение", pattern := '.*? (\d{2}.\d{2}.\d{2}), "\d(*.?)": "\d(.*?)"'; RegExp := TRegEx.Create(pattern, [roIgnoreCase, roMultiline]); Match := RegExp.Match('сюда свой текс (мультистрочный)'); // дальше не помню как разбирать Match массив // в инете можно глунять while Match.Success do begin WriteLn('Match : [' + Match.Value + ']'); end; RegExp.Free; end; Код:
Символ Эквивалент Соответствие \d [0-9] Цифровой символ. \D [^0-9] Нецифровой символ. \s [ \f\n\r\t\v] Пробельный символ. \S [^ \f\n\r\t\v] Непробельный символ. \w [[:word:]] Буквенный или цифровой символ или знак подчёркивания. \W [^[:word:]] Любой символ, кроме буквенного или цифрового символа или знака подчёркивания. Код:
Представление Число повторений Пример Соответствие {n} Ровно n раз colou{3}r colouuur {m,n} От m до n включительно colou{2,4}r colouur, colouuur, colouuuur {m,} Не менее m colou{2,}r colouur, colouuur, colouuuur и т. д. {,n} Не более n colou{,3}r color, colour, colouur, colouuur Последний раз редактировалось Uniq!, 13.09.2013 в 18:40. |
#10
|
||||
|
||||
![]() Чо блин? Тут одного ДКА хватит. Детерминированный Конечный Автомат.
За один проход все это сделать можно. Тем паче, эта херня напоминает JSON/BSON (даже больше на CSV смахивает). — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 13.09.2013 в 19:19. |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Uniq! (13.09.2013)
|
#11
|
||||
|
||||
![]() Да, кстати, а что за файл?
Откуда он берётся? |
#12
|
|||
|
|||
![]() ну вот переделала с pos на ваш RegExp
А толку нету, все равно не могу понять, как после разделителя получить с других и заполнить колонки listview-а ![]() Код:
var RegExp:TRegExpr; ItData : TListItem; begin RegExp:=TRegExpr.Create; RegExp.Expression:='"date": "(.*?)"'; if RegExp.Exec(RichEdit1.text) then begin repeat ItData := ListView1.Items.Add; ItData.Caption := RegExp.Match[1]; until not RegExp.ExecNext; end; end; упс не заметила, что ответ есть, сейчас гляну Последний раз редактировалось M.A.D.M.A.N., 13.09.2013 в 19:17. |
#13
|
||||
|
||||
![]() Вот по автоматам:
http://www.codenet.ru/progr/other/prbook/gl5.php — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#14
|
|||
|
|||
![]() Цитата:
Вот блин... оладушек... тут совсем не понятно( сдаюсь |
#15
|
||||
|
||||
![]() У вас круглые скобки являются оператором "выноса" из твоей строки "значений".
Т.е. если тебе нужно второе значение, возьми его в скобки круглые. = '"date": "(.*?)" ещё какие-то символы (.*?) ещё символы' Дайте реальный пример строки: |