![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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)