Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/47: Рейтинг темы: голосов - 47, средняя оценка - 4.89
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233

Сохранить класс в файл

03.12.2015, 09:30. Показов 10026. Ответов 97
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сохранение и загрузку делаю так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
TFisherMan = class// Класс Рыбак
    NameMan:string;//Имя
    SkillMen:Integer;//Опыт
      //В рюкзаке
      NajivkaMen:array of string;//Наживки
  end;
type
  MyFile = record
    FMyFile:TFisherMan;
  end;
//*************************************************************************
var
  FisherMan:TFisherMan;
  ManFile:file of MyFile; //файл типа записи Man
  ManDann: MyFile; {переменная типа записи ManDann для работы с файлом}
 
procedure SaveFisherMan();
var
  DirSave:string;
begin//Сохранить рыбака в Файл
  //DirSave:=Dir+'Save\'+FisherMan.NameMan+'.DAN';
  DirSave:=Dir+'Save\'+klyv.Combobox1.text+'.DAT';
  ManDann.FMyFile:=FisherMan;
  AssignFile(ManFile, DirSave);//связываем файловую переменную с файлом
  rewrite(ManFile); //открываем файл для записи
  write(ManFile, ManDann); //записать в файл созданный элемент Man
  ManDann.FMyFile:=nil;
  close(ManFile); //закрываем файл
end;
procedure LoadFisherMan();
var
  DirLoad:string;
  nN, nU:Integer;
begin //загрузить рыбака из файла
  DirLoad:=Dir+'Save\'+Klyv.ComboBox1.Text+'.DAT';
  //очистить рыбака
  FisherMan:=TFisherMan.Create;
  AssignFile(ManFile, DirLoad);//связываем файловую переменную с файлом
  Reset(ManFile);//открываем файл для чтения
  read(ManFile, ManDann);//считываем из файла очередной элемент в переменную ManDann
  FisherMan:=ManDann.FMyFile;
  close(ManFile); //закрываем файл
end;
Вроде сохраняет нормально, но файл *.DAT содержит «А<Z ».
Загружает тоже без ошибок, но переменная FisherMan пустая.
Что я делаю не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2015, 09:30
Ответы с готовыми решениями:

Сохранить файл в UTF8
Здравствуйте. Имеется функция сохранения файла: procedure TForm1.Button3Click(Sender: TObject); var t: TextFile; begin ...

Сохранить файл из memo
Как сохранить текст из поля Memo в файл, используя системный диалог SaveDialog

Открыть и сохранить файл
Здравствуйте. Есть программа в которой необходимо считать данные из файла .db, затем провести с ними расчеты и сохранить в этот же bd или в...

97
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.12.2015, 15:11
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Vabos Посмотреть сообщение
Пока только ручками приходилось делать
Ну знач пора вырастать из детских штанишек - пора играть во взрослые игры)

Добавлено через 6 минут
наследуешь свой класс TFisherMan от, например, TComponent, делаешь опубликованными св-ва класса, которые должны сохраняться/восстанавливаться, регистрируешь свой класс в RTTI

при сохранении создаешь любой продходящий наследник TStream, пишешь в него свой объект методом WriteComponent, пишешь стрим в файл вызовом SaveToFile

при восстановлении читаешь из файла в стрим вызовом LoadFromFile и восстанавливаешь свой объект вызовом ReadComponent

вуаля)
2
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
03.12.2015, 15:16  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
наследуешь свой класс TFisherMan от, например, TComponent, делаешь опубликованными св-ва класса, которые должны сохраняться/восстанавливаться, регистрируешь свой класс в RTTI
при сохранении создаешь любой продходящий наследник TStream, пишешь в него свой объект методом WriteComponent, пишешь стрим в файл вызовом SaveToFile
при восстановлении читаешь из файла в стрим вызовом LoadFromFile и восстанавливаешь свой объект вызовом ReadComponent
вуаля)
Можно к выше сказанному приложить пример,а то я с потоками на ВЫ
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.12.2015, 15:36
Краткий Ликбез
1
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
03.12.2015, 15:52  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Краткий Ликбез
Спасибо!
что то у меня не получается. класс наследую от TComponent
Delphi
1
2
3
4
5
TFisherMan = class(TComponent)// Класс Рыбак
    NameMan:string;//Имя
    SkillMen:Integer;//Опыт
      //В рюкзаке
      NajivkaMen:array of string;//Наживки
ругается на NameMan:string;
как зарегистрировать класс в RTTI.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.12.2015, 16:13
Часть II. Основы
Основное правило сериализации
Ты вообще читал это ?

Добавлено через 1 минуту
Регистрация класса в потоковой системе
А это читал ?

Такое впечатление что я самому себе ликбез прописал)
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
03.12.2015, 22:52
мне кажется, вариант с JSON попроще гораздо
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
04.12.2015, 09:03  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Такое впечатление что я самому себе ликбез прописал)
Читал я это. вчера пару раз, сегодня читал.
Код отрывками, не связанными др. с др., текст заумными словами написан.
И нету цельного примера, код от начала до конца, а только отрывки.
Не понимаю как это все связать воедино?

PS. может рано я за это взялся. Но ведь учиться никогда не поздно!

Добавлено через 4 минуты
Это как про "рога и копыта" в универе:
Один препод рассказывает про рога, др про копыта, 3 про вымя и тд.
Но ни кто не может сказать что все они говорят про одну большую корову.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.12.2015, 09:03
Цитата Сообщение от glyk5 Посмотреть сообщение
текст заумными словами написан
Приведи конкретную цитату "заумности" ..
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
04.12.2015, 09:07  [ТС]
Это я образно.

Добавлено через 2 минуты
мне бы пример (цельный).
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.12.2015, 09:26
Нет, так дело не пойдёт)
Ты сам заявил что "учиться никогда не поздно" - вот и давай разбираться по каждой конкретной "заумности".
Как только разберешься, надобность в примере сама собой рассосется..
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
04.12.2015, 09:38  [ТС]
Хорошо давайте разбираться, начнем объявления класса:
Delphi
1
2
3
4
5
6
7
  TFisherMan = class(TComponent)//*Класс Рыбак
  published
    NameMan:string;//Имя
    SkillMen:Integer;//Опыт
      //В рюкзаке
      NajivkaMen:array of string;//Наживки
end;
наследуем класс от TComponent и делаем опубликованными св-ва
Сразу ругается на NameMan:string;//Имя
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.12.2015, 09:51
Цитата Сообщение от glyk5 Посмотреть сообщение
наследуем класс от TComponent и делаем опубликованными св-ва
Сразу ругается на NameMan:string;//Имя
NameMan не является свойством.
Объявление свойства класса должно предваряться ключевым словом
Delphi
1
property
Примеры смотри, например, в стандартном юните Vcl.Classes
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
04.12.2015, 10:01  [ТС]
Спасибо!
Разобрался, это поля а не свойства.
т.е. мне их нужно обозвать как св-ва?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.12.2015, 10:08
естественно
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
04.12.2015, 10:47  [ТС]
пробовал вот так в обоих случаях ругается
Delphi
1
2
3
4
  TFisherMan = class(TComponent)//*Класс Рыбак
  published
    property NameMan:string read FNameMan  write  FNameMan;//Имя
    property SkillMen:Integer;//Опыт
в 1: случае ошибка:[dcc32 Error] Unit2.pas(77): E2168 Field or method identifier expected
в 2: [dcc32 Error] Unit2.pas(78): E2128 INDEX, READ or WRITE clause expected, but ';' found

Добавлено через 9 минут
я так понимаю не хватает INDEX, где его взять? или нумеровать ох по порядку?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.12.2015, 10:59
Цитата Сообщение от glyk5 Посмотреть сообщение
Field or method identifier expected
Ты хотя бы пытался перевести это и вникнуть в смысл ?
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
04.12.2015, 12:12  [ТС]
Все разобрался:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
  TFisherMan = class(TComponent)//*Класс Рыбак
 
  private
    FNameMan:string;
    FSkillMen:Integer;
    FNajivkaMen:array of string;
    FUdohka:array of string;
  published
    property NameMan:string  read FNameMan write FNameMan;//Имя
    property SkillMen:Integer read FSkillMen write FSkillMen;//Опыт
      //В рюкзаке
      property NajivkaMen:array of string read FNajivkaMen write FNajivkaMen;//Наживки
А как быть с массивом, ни как не получается
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.12.2015, 12:32
Цитата Сообщение от glyk5 Посмотреть сообщение
как быть с массивом
Штудировать
Часть III. «Высший пилотаж»
ликбеза.
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
04.12.2015, 13:02  [ТС]
Вроде разобрался:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
  TNajivkaMen=array of string;
  TFisherMan = class(TComponent)//*Класс Рыбак
 
  private
    FNameMan:string;
    FSkillMen:Integer;
    FNajivkaMen:TNajivkaMen;
  published
    property NameMan:string  read FNameMan write FNameMan;//Имя
    property SkillMen:Integer read FSkillMen write FSkillMen;//Опыт
      //В рюкзаке
      property NajivkaMen:TNajivkaMen read FNajivkaMen write FNajivkaMen;//Наживки
Правильно?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.12.2015, 13:18
неправильно
ты проштудировал Часть III ?

Добавлено через 8 минут
Цитата из ликбеза:
И, кроме того, существует ещё один случай, для которого описанные выше приёмы сериализации бесполезны: если вместе с объектом должна сохраняться информация, представленная во вполне определённом формате – например, картинка или звук.
..или данные не базовых типов или данные, представленные указателем, к коим относятся:
1. Динамические и вариантные массивы (твой случай)
2. Классы и объекты-экземпляры классов
3. Интерфейсы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.12.2015, 13:18

Сохранить файл в папке
Есть программа,и она сохраняет данные из стринггрида в эксель. Для сохранения такой код: For Col:=0 to SG2.ColCount-1 do For...

Сохранить таблицу в файл
Собрал код сохраняющий таблицу в файл, но он мне ненравится тем что он сохраняет все данные построчно. var List: TStringList; ...

Сохранить excel файл
надо как-то програмно сохранить excel файл XL := CreateOleObject('Excel.Application'); XL.DisplayAlerts := true; ...

Как сохранить файл ?
Вот мой код. procedure TForm1.N2Click(Sender: TObject); var bit:TBitmap; begin if dlgSave1.Execute() then begin ...

Сохранить цифры в файл
Здравствуйте, нужно сохранить цифры в file of byte. var f: file of byte; i: integer; b: byte; begin Write('n = '); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru