| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Парсинг файла |
| Автор: gather 27.5.2008, 18:18 | ||
| Доброе время суток всем ;) В наличии имеется файл со следующей структурой:
Записей может быть ооочень много. (средний размер текстового файла 15Мб) Посоветуйте пожалуйста, как лучше обрабатывать данный файл, учитывая то, что мне необходимо отрисовывать на объекте с помощью polyline и polygon объекты, по координатам, указанным в Data0 свойстве. |
| Автор: Rififi 27.5.2008, 18:41 |
построчное чтение и накопление данных между [Метка] .. [END] для анализа отдельных строк можно воспользоваться регулярными выражениями |
| Автор: gather 27.5.2008, 18:57 |
| Rififi, я понимаю что построчное чтение. Каким лучше способом обрабатывать и где и как хранить обработанные данные, ибо отрисовывать надо не 1 раз. А по мере изменения координат. А читать снова весь файл - ИМХО непрактично. Я склоняюсь в сторону TStringList, но как он поведет себя на таких объемах, не будет ли тормозить вот в чем вопрос. |
| Автор: jonie 27.5.2008, 19:39 |
| а чем обычные контейнеры, типа std::vector (при опред условиях, наверно, лучши выбор) хуже? |
| Автор: Rififi 27.5.2008, 19:50 |
| gather, я понимаю что построчное чтение. тогда задавай конкретный вопросы. то, что описывается в секции POLYLINE представляется как единая структура данных. соответственно по мере парсинга накапливаешь массив таких структур. как хранить обработанные данные Type => enum Label => std::[w]string StreetDesc => std::[w]string CityIdx => [u]int RoadID => [u]int RouteParam => int* или std::vector<int> Data0 => массив или std::vector of Point { x, y } Nod1 => int* или std::vector<int> Nod2 => int* или std::vector<int> |
| Автор: gather 27.5.2008, 20:30 |
| Rififi, извиняюсь за некорректную постановку вопроса. В итоге. Имеем из секции Data0 std::vector of Point { x, y } Можно пример, как использовать данный вектор? Просто никогда с ними не работал. По остальному - огромное спасибо. |
| Автор: artsb 27.5.2008, 20:57 | ||
|
| Автор: Rififi 27.5.2008, 21:03 | ||
Можно пример, как использовать данный вектор? Просто никогда с ними не работал.
|
| Автор: gather 27.5.2008, 21:26 |
| Rififi, artsb, Lazin, Спасибо. Rififi, Если я правильно понимаю, то в приведенном Вами примере - в вектор будут складываться значения x,y одной секции [POLYLINE][END] Как быть, если таких секций около 15000? |
| Автор: Lazin 27.5.2008, 22:04 | ||
как то так |
| Автор: Rififi 27.5.2008, 22:21 | ||
то есть код парсинга может выглядеть примерно так
|
| Автор: gather 27.5.2008, 22:40 |
| Ясно, спасибо. |