Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Длинный текст в структуру record

420
14 апреля 2006 года
Fobos
197 / / 10.03.2006
Подскажите пожалуйста, как добавить длинный текст в структуру record и записать в файл, т.е.:

Например вот код:
 
Код:
Type
   TMyRec = record
      Str: string[255]; //Обычная строка
      LStr: AnsiString; // Или WideString
   end;
....
  var
    RecFile: TRMyRec;
....


Фишка в том, что структура для типизированного файла должна быть с конечным значением (пр. string[255]), а AnsiString не имеют конечного значения. Поэтому в таком коде выдаётся ошибка.

А в моей проге необходимо создавать список, в котором будет в узлах (record) "Название" (string[255]) и соответствующее длинное определение (WideString или AnsiString) формата RTF, а затем сохранить это всё в типизированный файл.

Помогите мне, пожалуйста!!!
5
14 апреля 2006 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Fobos
А в моей проге необходимо создавать список, в котором будет в узлах (record) "Название" (string[255]) и соответствующее длинное определение (WideString или AnsiString) формата RTF, а затем сохранить это всё в типизированный файл.

Понятия типизированный файл и длинная строке не совместимы. Для того чтоб сохранить длинную строку сначала пиши длину строки а потом саму строку. Кроме того тебе НЕ УДАСТЬСЯ сохранить RTF форматирование с использованием файловых переменных - для этого нужно создавать потоки (streams).

420
14 апреля 2006 года
Fobos
197 / / 10.03.2006
Цитата:
Кроме того тебе НЕ УДАСТЬСЯ сохранить RTF форматирование с использованием файловых переменных - для этого нужно создавать потоки (streams).


А как поток сохранить в record?
Мне ведь списки надо делать?

5
15 апреля 2006 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Fobos
А как поток сохранить в record?
Мне ведь списки надо делать?


Код:
type
  TRec = record
         Field1: integer;
         Field2: double;
         Field3: string;
  end;

procedure WriteRec(Stream: TStream; const Rec: TRec);
var strlen: integer;
begin
//запись 1 поля
  Stream.WriteBuffer(Rec.Field1,sizeof(Rec.Field1));
//запись 2 поля
  Stream.WriteBuffer(Rec.Field2,sizeof(Rec.Field2));
//запись 3 пооля-строки
  strlen:=Length(Rec.Field3);
  Stream.WriteBuffer(strlen,sizeof(strlen));
  Stream.WriteBuffer(pointer(Rec.Field3)^,strlen*sizeof(Char));
end;

procedure ReadRec(Stream: TStream; var Rec: TRec);
var strlen: integer;
begin
//чтение 1 поля
  Stream.ReadBuffer(Rec.Field1,sizeof(Rec.Field1));
//чтение 2 поля
  Stream.ReadBuffer(Rec.Field2,sizeof(Rec.Field2));
//чтение 3 поля-строки
  Stream.ReadBuffer(strlen,sizeof(strlen));
  SetString(Rec.Field3,nil,strlen);
  Stream.ReadBuffer(pointer(Rec.Field3)^,strlen*sizeof(Char));
end;

<...>
var Stream: TFileStream;

begin
Stream:=TFileStream.Create('c:\file.tmp',fmCreate or fmOpenWrite);
WriteRec(Stream, ...);
Stream.Free;
end;


begin
Stream:=TFileStream.Create('c:\file.tmp', fmOpenRead);
ReadRec(Stream, ...);
Stream.Free;
end;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог