![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
работа с файлами [D7, XP]
картман © (2010-09-22 14:08:00)Всем привет!
Данные вида:
col1 col2 col3
row1 x 0 x
row2 0 x x
row3 x x 0
надо хранить в файле. row - строка переменной длины, col - Integer, x - Double, Где стоит 0 значение отсутствует.
Как хранить?
Думаю так: первый байт - длина строки, за строкой - кол-во записей и т.д.
[LenStr,StrData,CntRec,[Recs]]
Так пойдет, с точки зрения скорости?
И подскажите еще, какими функциями осуществлять доступ(желательно апишными - потом на с++ надо будет переписать)
картман (2010-09-22 15:27:00) [1]
> Andy BitOff © (22.09.10 15:23) [13]
да в общем понятно - я хотел узнать, нормально ли так делать, а саму суть знал на уровне теории
картман (2010-09-22 15:25:00) [2]
> Сергей М. © (22.09.10 14:52) [11]
не в .Net или как там назвать правильно? А в ANSI C++. Чего-то я только видел обсуждения какой библиотекой лучше пользоваться: Qt или wxWidget, а в букваре прочел, что можно через ATL. Или я совсем ничего не понял?
> Palladin © (22.09.10 14:56) [12]
>
> А задача, вообще случайно, не сводится ли к передаче рекорсета
> с одного места в другое? )
Ну, концептуально да: в одном случае мне надо ускорить вычисления, которые я провожу на sql server, а в другом - нужно модифицировать данные под свои нужды, но базу трогать нельзя, да и неудобно(долго) с ними работать в БД будет.
А так нет, конечно.
Andy BitOff (2010-09-22 15:23:00) [3]> Palladin © (22.09.10 14:33) [4], [7]
Как ты все ясно, прозрачно и доходчиво объяснил =))))
Palladin (2010-09-22 14:56:00) [4]А задача, вообще случайно, не сводится ли к передаче рекорсета с одного места в другое? )
Сергей М. (2010-09-22 14:52:00) [5]
> в сравнении с киданием TADOConnection на форму
)
Ну, положим, разница в нехилости при кидании в дизайн-тайм и рантайм-создании компонентов в случае с ADO ничем не отличается случая с не-ADO-компонентами.
Или я тебя неверно понял..
> Сразу с файлом?
Угу. Как и TClientDataSet.
С той лишь разницей что портировать работу с TClientDataSet в приплюснытое приложение ты упаришься, а TADODataSet туда переползет относительно легко.
картман (2010-09-22 14:46:00) [6]
> > А собссно к селекту твоя задача какое отношение имеет
> ?
> > Вроде никакого ..
это я нарушаю правила форума - задаю другой вопрос
картман (2010-09-22 14:42:00) [7]
> Palladin © (22.09.10 14:40) [7]
ага, усё понятно
картман (2010-09-22 14:41:00) [8]
> Сергей М. © (22.09.10 14:37) [6]
> Вопрос лишь в том какие усилия считать "нехилыми" ..
в сравнении с киданием TADOConnection на форму
> А собссно к селекту твоя задача какое отношение имеет ?
> Вроде никакого ..
ааа... ADO может не только с БД работать? Сразу с файлом? Не знал.
Palladin (2010-09-22 14:40:00) [9]Плин... да Ридер не читает больших кусков из Стрёма. Он читает своими, нужными ему кусками, по байту, по двум, 15, 67. А вот Стрём, из которого он читает, обеспечивает ему буфферезированную отдачу информации. То бишь, Ридер запросил 4 байта (длинну строки), причем он (Ридер) даже понятия не имеет откуда он ее читает, а БуффередСтрём увидев данное непосредство, прочитал 4 байта из файла (сети, памяти) и еще РазмерБуффераБуффераСтрёма-4 байтов. И далее, когда ридер запрашивает, дальнейшие данные, БуффередСтрём уже выдает ему из буффера.
Все просто как банан.
Сергей М. (2010-09-22 14:37:00) [10]
> картман © (22.09.10 14:22) [3]
> этот великий и могучий требует нехилых усилий, чтобы просто
> подключиться к БД и сделать селект?
Ну кое-каких - да, требует. Вопрос лишь в том какие усилия считать "нехилыми" ..
А собссно к селекту твоя задача какое отношение имеет ?
Вроде никакого ..
картман (2010-09-22 14:35:00) [11]
> Palladin © (22.09.10 14:33) [4]
хорошо, прочитал я большой кусок ридером из стрема - как мне с ним дальше обращаться?
Palladin (2010-09-22 14:33:00) [12]Есть такое понятие. Стрёмы. Кстати гениальное. В Делфи они тоже со Стрёма начинаются. И в Джява (хоть немножко запутанно, но тут виноваты не мы а создатели класса Вектор). А дальше от Стрёма начинается куча ответвлений, что не суть есть важно. Важно то что еще есть и Ридеры из Стрёмов. Ридерам пофени откуда они ридят из МемориСтрёма, ФайлоСтрёма или еще какого нибудь пошлого ТиСиПиСтрёма. Основная задача Ридеров - прочитать Структуру из Стрёма.
Идея БуффередСтрёма заключается в чтении из абстрактного Стрёма целыми кусками, прямо таки железобетонными, по мехабайту или двум. Предоставляя структурное чтение из себя Ридерам.
В результате рождается феномен пофигизма Ридером по отношению к своим метода чтения из Стрёмов.
картман (2010-09-22 14:22:00) [13]
> Сергей М. © (22.09.10 14:12) [1]
обязательно подумаю. Кстати, насчет ado и там, и там... кажись, этот великий и могучий требует нехилых усилий, чтобы просто подключиться к БД и сделать селект?
> Palladin © (22.09.10 14:12) [2]
пасиб. А можно их по аглицки написать?
> тут дело в другом.... делфи или сипп(ц) без разници
ну, это чтобы не советовали StringList.LoadFromFile
а отображение файлов в память - имеет смысл только для больших размеров?
Сергей М. (2010-09-22 14:12:00) [14]
> желательно апишными - потом на с++ надо будет переписать
Из сишных прог ADO-объекты доступны так же как из дельфийских.
Так что возьми ADODataSet и не парься с форматом - там уже все изобретено и не самым худшим образом
Palladin (2010-09-22 14:12:00) [15]
> Думаю так: первый байт - длина строки, за строкой - кол-
> во записей и т.д.
ну а чего бы не пойти... все-же ходят )
тут дело в другом.... делфи или сипп(ц) без разници... буфферэд ридер + ридер в структуру... одинаково....