Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Parser. Как сделать быстрее и с минимальной затратой памяти?


Cosinus ©   (2005-02-10 10:23:00) 

Есть некоторый файл(100К мах), который необходимо раcпарсить. Что я хочу сделать:
1) Загружаю его в Mem:=TMemoryStream.Create
2) GetMem(Buffer,Mem.Size)
3) Mem.Freeи далее по всему дереву процедур и функций парсинга, в качестве параметра передаю Buffer (например функция нахождения определеных байт, с возвращаемым параметром pBytePos = ^(array of SomeRecord)(начало и конец некоторого блока), которая в свою очередь вызывается из функции разбиения на блоки и т.д.
Я ни разу с этим не сталкивался, и прошу помощи у мастеров. Как органичнее это сделать? Может я вообще не туда пошел?


Cosinus   (2005-02-10 10:49:00) [1]


> TUser ©   (10.02.05 10:47) [6]

Угу. Бинарник.
Угу. Дерево. :)))
Спасибо за совет, буду разбираться.


TUser   (2005-02-10 10:47:00) [2]


> Так может тогда и работать с TMemoryStream?
> И ни писать ни в какой buffer?

Вот и я о том же. А по поводу примеров - ты даже не сказал, что такое ты парсишь. По ходу дела я так понял, что бинарник (хотя не уверен). В принцыпе дело можно было бы организовать и в виде конечного автомата + стек (я так понимаю, что у тебя там какое-то дерево хранится).


Cosinus   (2005-02-10 10:43:00) [3]

Хорошо :) Я понял.
Буду благодарен за грамотныестатьи с примерами на дельфи по парсингу.


Anatoly Podgoretsky   (2005-02-10 10:37:00) [4]

Так может работать с буфером и не использовать никакой TMemoryStream


Cosinus   (2005-02-10 10:33:00) [5]


> TUser ©   (10.02.05 10:28) [2]

Так может тогда и работать с TMemoryStream?
И ни писать ни в какой buffer?


TUser   (2005-02-10 10:28:00) [6]

Непонятно - зачем из потока в какой-то буфер писать? Да и вообще - мало чего понятно, если честно.


Cosinus   (2005-02-10 10:25:00) [7]

Гы. Забыл прочитать Mem.Read(Buffer,Mem.Size)


Наверх

Титульная страница Поиск, карта сайта Написать письмо