Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизЗапись Record в файл Найти похожие ветки
← →
alik-os (2004-04-06 09:35) [0]имеется record в ввиде
TTheInfo = record
FirstName: String;
LastName: String;
end;
или
TTheInfo = record
FirstName: array[0..20] of Char; или string[20]
LastName: array[0..20] of Char; или string[20]
end;
Задача записать эту запись в файл.
В первом случае при записи Делфи ругается, что нет фиксированной длины строки.
Во втором случае меня не устраивает, что длина поле фиксированная.
Как можно сделать, что длина поле определялась динамически? может быть использовать Pchar? Пробовал и так, но у меня получается вместо символом мусор...
Если кто сталкивался с подобной проблемой при записи Record в файл, прошу откликнуться и помочь, желательно с примером.
← →
Digitman © (2004-04-06 09:41) [1]
> Задача записать эту запись в файл
и все ? а дальше как собрался работать с этим файлом ?
ведь если "не мытьем - так катаньем" ты все же запишешь в файл N записей переменного размера, как ты намерен позиционироваться в файле для поиска/считывания опред.записи ? ты об этом подумал ?
← →
alik-os (2004-04-06 09:52) [2]Вот и прошу помощи с примером...
← →
Palladin © (2004-04-06 09:53) [3]Наводка
f:file
l:integer
s:string
l:=length(s);
blockwrite(f,l,sizeof(l));
blockwrite(f,s[1],l);
> Если кто сталкивался с подобной проблемой
О какой проблеме идет речь? Задачу вижу, проблему нет.
← →
Anatoly Podgoretsky © (2004-04-06 09:59) [4]Никак, типизированые файлы имеют записи фиксированой длины
← →
alik-os (2004-04-06 10:00) [5]спасибо за наводку, пробовал просто write а не blockwrite...
а проблема возникает, т.к. опыта еще маловато, к сожалению
← →
Digitman © (2004-04-06 10:02) [6]
> alik-os (06.04.04 09:52) [2]
> Вот и прошу помощи с примером...
примером чего ? вывода в файл записи с полями перем.длины ?
это не проблема, см., к примеру, [3]
меня интересует, что дальше ты с таким файлом намерен делать, как ты продумал механизм позиционирования на нужную запись в полученном таким образом файле ...
← →
alik-os (2004-04-06 10:04) [7]как позиционировать? все запись при чтении считывать в массив, а необходимую запись найти в цикле по необходимому параметру
← →
Digitman © (2004-04-06 10:16) [8]
> alik-os
все это замечательно, когда записей немного ..
а если их десятки или сотни тысяч ?
← →
alik-os (2004-04-06 10:18) [9]Для Digitman: восклицать "в чем проблема?" или "это не проблема" все могут, если есть знания можно и поделиться, вот к примеру [3] взял да подсказал...
а много говорить да ничем не помочь - это многие так умеют, да и просто это фанфарство
← →
alik-os (2004-04-06 10:20) [10]а мне много записей и не надо в пределах 500 штук мне будет достаточно...
← →
Palladin © (2004-04-06 10:21) [11]
> alik-os (06.04.04 10:04) [7]
Наводка примитивна, и указывает общий принцип записи данных в файл. Для случая приведенного Digitman, необходимо создавать таблицы размещения данных в файле. Индексы по определенному ключу. Или же воспользоватся давно написанным, использовать БД.
← →
Digitman © (2004-04-06 10:23) [12]
> вот к примеру [3] взял да подсказал
а дальше ты своей головой уже думать должен !
организовав по образу и подобию уже последовательное считывание записанных таким образом записей
← →
alik-os (2004-04-06 10:29) [13]сама система у меня написана и работает, позиционирует на необходимую запись...есть система поиска, но для текстового поля жестко закреплен размер. везде в учебниках, да и здесь писали, что типизированные файлы имеют только фиксированную длину. А если возникнет случай когда вводимая текстовая переменная будет больше чем предусмотренно? Вот в этом и есть вопрос - как с этим бороться?
Да можно использовать sql сервер - но это рационально для больших баз данных. В моем случае необходимо просто отвязаться от него.
← →
Fay © (2004-04-06 10:33) [14]>> как с этим бороться?
Предусматривать достаточно.
← →
Плохиш (2004-04-06 10:38) [15]>alik-os (06.04.04 10:29) [13]
> Да можно использовать sql сервер - но это рационально для
> больших баз данных. В моем случае необходимо просто отвязаться
> от него.
Есть достаточно много маленьких и локальных баз данных. Тот же Access, к примеру.
← →
alik-os (2004-04-06 10:38) [16]да, это самый простой способ...
← →
alik-os (2004-04-06 10:42) [17]> Есть достаточно много маленьких и локальных баз данных. Тот же Access, к примеру.
Можно и так (делал), но при переносе программы на другую машину, необходимо следить чтобы там был BDE или ODBC, следить за правильностью пути к "маленькой базе"...
← →
Fay © (2004-04-06 10:48) [18]А за правильностью пути к твоим файлам следить не надо?
← →
Digitman © (2004-04-06 10:49) [19]
> можно использовать sql сервер - но это рационально для больших
> баз данных
никто тебя не заставляет использовать внешние промышленные сиквел-серверы
в конце-концов для многих серверных платформ есть их упрощенные внедряемые в кл.процесс движки ... можно воспользоваться и разного рода компонентами а-ля memory-table, clientdataset .. они унифицируют доступ к НД, предоставляя станд.интерфейс класса TDataSet для доступа к НД ... прежде чем изобретать велосипед с хранением НД в своем формате и считывании/работе с этим НД в памяти, следовало бы, наверно, изучить готовые алгоритмы
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c