![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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.
|
| Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение: | ||
Uniq! (13.09.2013)
| ||
|
#5
|
||||
|
||||
|
|
|
#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 смахивает). Последний раз редактировалось 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 |
|
#14
|
|||
|
|||
|
Цитата:
Вот блин... оладушек... тут совсем не понятно( сдаюсь |
|
#15
|
||||
|
||||
|
У вас круглые скобки являются оператором "выноса" из твоей строки "значений".
Т.е. если тебе нужно второе значение, возьми его в скобки круглые. = '"date": "(.*?)" ещё какие-то символы (.*?) ещё символы' Дайте реальный пример строки: |