Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Запись класса в файл :?:  (Прочитано 9278 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Sukkub
Гость
« : 15-12-2003 21:26 » 

есть свой класс, нужно его скинуть в файл, чтобы потом загрузить можно было.
мои действия:
  Tmyc = class (tobject)
    I:integer;
    S:String;
  end;
var
  qq: Tmyc;
***
procedure TForm1.Button1Click(Sender: TObject);
var
fff: file of Tmyc;
begin
    qq :=Tmyc.Create;
    qq.S:='1wwe';
    qq.I:=936;

  assignfile(fff,'tt');
  reset(fff);
  rewrite(fff);
  write(fff,qq);
  closefile(fff);

  assignfile(fff,'tt');
  reset(fff);
  read(fff,qq);
  closefile(fff);
end;

оказалось, что в файл кидает только указательна класс, и соответственно читает по этому указателю - т.е. то что сейчас в этом классе.

как мне запихнуть в файл именно данные из класса и потом их загрузить?
Записан
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #1 : 16-12-2003 14:43 » 

Обрати внимание на закомментированный Reset!  :!:  Убери - и глюк исчезнет  Ага
И еще, при проверке считывания данных отведи под это дело другую переменную. Так можно сразу определить, читает прога или нет, и что она читает.

type
  Tmyc = class (tobject)
    i: integer;
    s: string;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  src, dst: TMyClass;
  my_file: file of TMyClass;
begin
  src := Tmyc.Create;
  src.s := '1wwe';
  src.i := 936;

  AssignFile(my_file, 'tmp.dat');
//  Reset(my_file);
  Rewrite(my_file);
  Write(my_file, src);
  CloseFile(my_file);

  AssignFile(my_file, 'tmp.dat');
  Reset(my_file);
  Read(my_file, src);
  CloseFile(my_file);
end;

Цитата

оказалось, что в файл кидает только указательна класс, и соответственно читает по этому указателю - т.е. то что сейчас в этом классе.

Ну, не знаю, где там указатели...  Я шокирован! Что-то ты, похоже, напутал...  Здесь была моя ладья...
Записан
Sukkub
Гость
« Ответ #2 : 19-12-2003 10:17 » 

Спасибо, но это сдесь ошибка - копировать не умею нормально:) В любом случае - не работает. Я вот думаю, а вообще такое возможно ли в - классе могут быть и процедуры, а их как в файл зикидывать? так что наверно врядли.
Записан
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #3 : 22-12-2003 10:05 » 

Насчет методов мысля интересная, я об этом не подумал. ИМХО в файл записываются только значения переменных класса.
Цитата

В любом случае - не работает.

Ну, не знаю... У меня все6 работает отлично. Я на Delphi тестировал, мож в этом дело?
Записан
crazy
Гость
« Ответ #4 : 23-12-2003 14:59 » 

Дело в том, что в переменной типа TObject (или от него наследованной) хранится только указатель на объект. Чтобы записать это дело в фал нужно писать все, что находится по этому указателю, а при считывании

var
  o: TObject;
...
o := TObject.CReate;
...
read(f,^o);
Записан
sss
Специалист

ru
Offline Offline

« Ответ #5 : 25-12-2003 08:48 » 

Код:

TClass1 = class
x{ integer;
constructor LoadFromFile)var f{ file:; virtual;
procedure SaveToFile)var f{ file:; virtual;
end;

TClass2 = class)TClass1:
y{ integer;
constructor LoadFromFile)var f{ file:; overload;
procedure SaveToFile)var f{ file:; overload;
end;

procedure TClass1.SaveToFile)....
begin
  BlockWrite)f, x, sizeof)x::;
end;

procedure TClass2.SaveToFile)....
begin
  inherited;
  BlockWrite)f, y, sizeof)y::;
end;

constructor  TClass1.LoadFromFile)...
begin
 BlockRead)f, x, sizeof)x::;
end;

constructor  TClass2.LoadFromFile)...
begin
 inherited;
 BlockRead)f, y, sizeof)y::;
end;
 

Я надеюсь далее понятно...
Посмотрите внимательно на классы в Delphi !
Записан

while (8==8)
sss
Специалист

ru
Offline Offline

« Ответ #6 : 25-12-2003 08:50 » 

Прошу прощения там override конечно а не overload...
Записан

while (8==8)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines