Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2009, 20:39   #1
garybaldi
Новичок
Джуниор
 
Регистрация: 29.10.2009
Сообщений: 2
Вопрос Сохранение объекта в файл

Здравсвуйте. Создал программу, реализующую создание и обучени нейронной сети. И возникла необходимость сохранять обученную сеть в файл с возможностью последующей загрузки. Каждый нейрон - объект класса TNeron, наследнике на TComponent. Если надо, приведу описание.
Вся сеть представлена массивом типа TNA: array of array of TNeron. То есть у меня есть массив NN[i,j] из объектов TNeron.
Нашёл, как записывать объекты через потоки. Сделал следующее:
Код:
  TNeroWeb = class(TComponent) // Дополнительный объект, который будет содержать информацию о всех объейктах TNeron
    private

    public
      NW: TNA;
      constructor Create; overload;
    published
      Property PNW: TNA read NW write NW;
    end;

procedure TForm1.Button3Click(Sender: TObject);
var Path: string;
    TempN: TNeroWeb; // Временная компонента
begin
    if SaveDialog.Execute then
    begin
      Path:=SaveDialog.FileName;
      TempN:=TNeroWeb.Create;
      TempN.NW:=NN;
      SaveNeuroWeb(Path, TempN);
    end;
end;

Procedure SaveNeuroWeb(P: string; NW: TNeroWeb);
 var
  S: TFileStream;
  M: TMemoryStream;
 begin
     S := TFileStream.Create(P, fmOpenWrite or fmCreate);
     M := TMemoryStream.Create;
     try
        M.WriteComponent(NW);
        M.Position:=0;
        ObjectBinaryToText(M, S);
     finally
     S.Free;
     M.Free
     end;
 end;
Но на выходе я получаю текстовый файл такого вида:
object TNeroWeb
end

Где я допустил ошибку? Нужно, чтобы в файле содержался вся информация обо всех элементах TNeron
garybaldi вне форума Ответить с цитированием
Старый 30.10.2009, 07:10   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
M.WriteComponent(NW);
о каких внутренних объектах и методах TNeronweb может знать функция с таким прототипом
TMemoryStream.WriteComponent(Instan ce: TComponent)

только о тех что были объявлены в TComponent
для записи могут (и используются) виртуальные методы TComponent

чтобы узнать что и как F1 + SeeAlso
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.10.2009 в 07:13.
evg_m вне форума Ответить с цитированием
Старый 30.10.2009, 07:33   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А может не стоит таким образом писать компонент?
Может стоит в нем описать отдельный метод, и в нем код сохранения каждого поля?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.10.2009, 09:49   #4
garybaldi
Новичок
Джуниор
 
Регистрация: 29.10.2009
Сообщений: 2
По умолчанию

По всему интернету разбросан код сохранения объектов на примере коллекций, и там всё теоретически работает.. А у меня нет(
garybaldi вне форума Ответить с цитированием
Старый 30.10.2009, 09:55   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и там всё теоретически работает
Вот именно что теоретически...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение в файл Ant1Player PHP 4 31.03.2009 16:33
Сохранение иконки в файл Nester Общие вопросы Delphi 1 03.01.2009 16:49
Сохранение в текстовый файл Askat Общие вопросы Delphi 11 26.02.2008 14:47
Сохранение в файл Македонский Общие вопросы Delphi 4 05.09.2007 15:04
Сохранение в файл *.*С Noor Общие вопросы C/C++ 6 08.01.2007 22:44