![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Подскажите пожалуйста как сохранить TStringList в составе record в файл? Знаю что нужно использовать TStream но не как не могу разобраться как с ним работать. Вот эти данные нужно записать в файл, а потом считать.
Код:
TTest = record
TVopros : TStringList;
TVopr1 : TStringList;
TVopr2 : TStringList;
TVopr3 : TStringList;
TVopr4 : TStringList;
TVopr5 : TStringList;
TVopr6 : TStringList;
PicName :string[100];
TOtv1 : Boolean;
TOtv2 : Boolean;
TOtv3 : Boolean;
TOtv4 : Boolean;
TOtv5 : Boolean;
TOtv6 : Boolean;
end;
TFileTest = record
TKolVopr : Byte;
TKolZadVopr: Byte;
TPredmet : String[30];
RecordTest : array[1..100] of TTest;
min:Integer;
ProvVrem:Boolean;
end; |
|
#2
|
||||
|
||||
|
К сожалению, такое напрямую не сделать - внедрять объекты в файл прямого доступа сложно, максимум содержимое StringList можно сохранить в текстовый файл его же методами. Конечно, помудрив немного записать всё же получится, но как потом обратно считывать, когда не известны изначально размеры полей получившейся записи? Вариант решения - преобразовать их под более типизированный вид, напр.
Код:
TTest = record
TVopros: array[0..99] of String[255];
TVopr1 : array[0..99] of String[255];
TVopr2 : array[0..99] of String[255];
TVopr3 : array[0..99] of String[255];
TVopr4 : array[0..99] of String[255];
TVopr5 : array[0..99] of String[255];
TVopr6 : array[0..99] of String[255];
...
TFileTest = record ...
...т.е так точно понятно сколько занимает байт, и на какой позиции распологается поле записи в ФПД. Ну а дальше Код:
var
f: file of TFileTest;
r:TFileTest;
begin
AssignFile(f, 'Имя файла');
// чтение rec 10
if FileExists('Имя файла') then Reset(f) else ReWrite(f);
Seek(f,10);
Read(f,r);
// запись rec 20
Seek(f, 20);
Write(f,r);
Closefile(f);
end;Не экономично, зато надёжно. При записи можно пустые строки забивать спецсимволами, а при считывании их игнорировать |