Проблеммы с типом String

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

Размер записи не меняется. Размер записи известен на этапе компиляции.
Строку в бинарный файл пишут обычно так: пишут длину строки, потом саму строку

Код: Выделить всё

procedure SaveString(const Value: string; Str: TStream);
var Count: Integer;
begin
 Count:=Length(Value);
 if Str.Write(Count, Sizeof(Integer)) < Sizeof(Integer) then
  raise Exception.Create('Ошибка записи');
 if Count > 0 then
  if Str.Write(Value[1], Count) < Count then
   raise Exception.Create('Ошибка записи');
end;

Ну, и читают также: читают длину строки и саму строку. Надо только точно знать, что сейчас будет строка :-)
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

А зачем вообще пихать структуру в файл ?Может достаточно обычной таблицы в файле в разделителями tab. Заодно и место сэкономите, так как для каждой строки выделяется пространство по ее длине.
Кот239
незнакомец
Сообщения: 7
Зарегистрирован: 02.08.2011 14:05:24

Сообщение Кот239 »

Ism писал(а):А зачем вообще пихать структуру в файл ?Может достаточно обычной таблицы в файле в разделителями tab. Заодно и место сэкономите, так как для каждой строки выделяется пространство по ее длине.


"Пихать структуру в файл"..это я так хотел легко и быстро сохранять массивы своих записей. Однако уже пришел к выводу что лучше один раз написать алгоритм побайтового сохранения например в безтиповом файле, чем нагружать дисковое пространство пустыми полями.
Ответить