Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.23;
Скачать: CL | DM;

Вниз

File+Save+..Массив класса??!!!!   Найти похожие ветки 

 
Fl@sh ©   (2005-09-28 19:53) [0]

Уважаемые мастера!!

У меня програма емулятор работи логических елементов, т.е. юзер вибирает логический елемент, строит схему, тоисть соединяет нужним образом с другим, третим и т.д. Задает начальные значения и в конце получает результат (0 или 1).
Все ето уже работает!!!

Есть 3 масива в которых содержаться данные:
1. Elements //тип логического елемента
2. Lines      //линии которые обединяют елементы
3. Circle     //показивает произведена ли связь нужным образом

Elements : array of TMicroChip
Lines : array of TLineLink

Вот что содержиться в Elements:

Elements[1] = ((($11E2EE0, $11D4184),($11DC838),$11DC434, elEnd, 1480, 1370));

Вся схема полностю храниться в трех массивах!!!

Для чего все это??
Надо сделать Save чтобы пользователь смог сохранить данные, а потом загрузить и продолжыть работу со схемой!
Надо сохранить в файл!

Пробовал!! Просидел чеса 2!
Пробовал и textfile, char - говотит ошибка!!

Как сохранить может есть какие-то другие идеи???
Надо сохранить и считать с файла данные в те же массивы при откритии схемы

Может что-то непонятно, я все опишу.
Заранее спосибо за ответы!!


 
Джо ©   (2005-09-28 19:55) [1]


> Пробовал!! Просидел чеса 2!
> Пробовал и textfile, char - говотит ошибка!!

Как пробовал, какая ошибка?


 
Джо ©   (2005-09-28 19:56) [2]

TMicroChip,TLineLink - это классы? записи? Или что?


 
Fl@sh ©   (2005-09-28 19:57) [3]


> TMicroChip,TLineLink

Классы!!


 
Джо ©   (2005-09-28 19:59) [4]

Тогда, как ты понимаешь, хранить в файле содержимое массивов Elements,Lines - довольно бессмысленно, не так ли?
Сделай у самих этих классов процедуры  чтения/записи в файл/поток.


 
Fl@sh ©   (2005-09-28 20:00) [5]

Ошибку немогу сейчас посмотреть, так как нету рядом среды:((( но помню какое то I/O.


 
Fl@sh ©   (2005-09-28 20:04) [6]


> Сделай у самих этих классов процедуры  чтения/записи в файл/поток.


Это будет не так просто
Там сложное наследование
Elements : array of TMictoChip
TMIctoChip = class(TChip)
TChip = class (..)


 
Джо ©   (2005-09-28 20:05) [7]


>  [6] Fl@sh ©   (28.09.05 20:04)
> Это будет не так просто

Выбрось ту книгу, в которой ты прочитал, что программирование - это просто.


 
Fl@sh ©   (2005-09-28 20:10) [8]


> Сделай у самих этих классов процедуры  чтения/записи в файл/поток.


А как приблизительно делать.
Хоть какой-то намек..

Например в класе Tchip создается елемент и присваивается ему тип(И, ИЛИ) и задается количество  виводов елемента
В классе TMictoChip задается значения виводов

Как все это сохранять??


 
Джо ©   (2005-09-28 20:15) [9]


>  [8] Fl@sh ©   (28.09.05 20:10)
> А как приблизительно делать.
> Хоть какой-то намек..

Был бы код, был бы и намёк. Впрочем, намек, и даже 2 см. [4]...
Думаешь, кому-то очень хочется писать за тебя рутинный, хоть и несложный, код - даже не зная, подойдет ли он к твоей задаче?


 
Fl@sh ©   (2005-09-28 20:23) [10]


> Как пробовал, какая ошибка?

[Error] UI.pas(670): Illegal type in Write/Writeln statement

Вот ошыбка,

мне код не нужен
Нужен просто алгоритм, как сохранять теоретически


 
Джо ©   (2005-09-28 20:27) [11]

Вот костяк алгоритма, AKA "идея":

type
 TChip = class
 private
   FA: Integer;
 public
   property A: Integer read FA;
   procedure SaveToStream (AStream: TStream); virtual;
   procedure LoadFromStream (AStream: TStream); virtual;
 end;

 TMicrochip = class (TChip)
 private
   FB: Integer;
 public
   property B: Integer read FB;
   procedure SaveToStream (AStream: TStream); override;
   procedure LoadFromStream (AStream: TStream); override;
 end;

 TChips = array of TChip;

// запись массива
procedure SaveChipsToFile (AFileName: string; const Chips: TChips);
var
 AFileStream: TFileStream;
 I,Cnt: Integer;
begin
 AFileStream := TFileStream.Create(AFileName,fmCreate);
 try
   // запишем кол-во элементов
   Cnt := High(Chips)+1;
   AFileStream.Write(Cnt,SizeOf(Cnt));
   for I := 0 to High (Chips) do
     Chips[I].SaveToStream(AFileStream);
 finally
   AFileStream.Free;
 end;
end;

// чтение массива
function CreateChipsFromFile (AFileName: string): TChips;
var
 AFileStream: TFileStream;
 I,Cnt: Integer;
 AChip: TChip;
begin
 SetLength(Result,0);
 AFileStream := TFileStream.Create(AFileName,fmCreate);
 try
   AFileStream.Read(Cnt,SizeOf(Cnt));
   SetLength(Result,Cnt);
   for I := 0 to Cnt-1 do
   begin
     AChip := TMicrochip.Create;
     AChip.LoadFromStream(AFileStream);
     Result[I] := AChip;
   end;
 finally
   AFileStream.Free
 end;
end;

{ TChip }

procedure TChip.LoadFromStream(AStream: TStream);
begin
 AStream.Read(FA,SizeOf(FA))
end;

procedure TChip.SaveToStream(AStream: TStream);
begin
 AStream.Write(FA,SizeOf(FA))
end;

{ TMicrochip }

procedure TMicrochip.LoadFromStream(AStream: TStream);
begin
 inherited;
 AStream.Read(FB,SizeOf(FB))  
end;

procedure TMicrochip.SaveToStream(AStream: TStream);
begin
 inherited;
 AStream.Write(FB,SizeOf(FB))
end;


 
Fl@sh ©   (2005-09-28 20:33) [12]

Senks!!!!
Сейчас буду пробовать под свою задачу!!!


 
Digitman ©   (2005-09-29 13:58) [13]


> как сохранять теоретически


теоретически сохранение/воссоздание объекта означает сохранение/воссоздание всех тех свойств, которые в совокупности определяют "индивидуальность" этого объекта.

вот ты - объект класса "Человек".

твой клон должен обладать теми же характеристиками (свойствами), что и у тебя .. ну хотя бы, к примеру, пол, возраст, рост, вес  ..

это значит, что для того чтобы воссоздать тебя в клоне, нужно сохранить (запечатлеть где-то) эти самые твои "свойства" - пол, возраст, рост, вес ..

то же самое и в программе - сохрани значения основных св-в, описывающих твой объект-чип, а при воссоздании чипа прочитай эти сохраненные значения в том же порядке и назначь их соотв.св-вам воссоздаваемого объекта-чипа



Страницы: 1 вся ветка

Текущий архив: 2005.10.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.04 c
3-1126093577
stud
2005-09-07 15:46
2005.10.23
сортировка в dxMemData


2-1128188325
DroNIX
2005-10-01 21:38
2005.10.23
С++ TO DELPHI (PASCAL)


2-1127484780
Pasha L
2005-09-23 18:13
2005.10.23
Как пользоваться dcc32


2-1127749588
erika
2005-09-26 19:46
2005.10.23
fb


14-1128498684
-SeM-
2005-10-05 11:51
2005.10.23
GUI-аналог cacls.exe