|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Запись в файл Record с TStringList
Подскажите пожалуйста как сохранить 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; Не экономично, зато надёжно. При записи можно пустые строки забивать спецсимволами, а при считывании их игнорировать Я не понял Вашего вопроса, но всё же Вам на него отвечу! |