Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.05.2014, 15:15
stas8359 stas8359 вне форума
Прохожий
 
Регистрация: 03.05.2014
Сообщения: 3
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Запись в файл 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  
Старый 04.05.2014, 07:30
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

К сожалению, такое напрямую не сделать - внедрять объекты в файл прямого доступа сложно, максимум содержимое 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;

Не экономично, зато надёжно.

При записи можно пустые строки забивать спецсимволами, а при считывании их игнорировать
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter