Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.04 c
4-1124309849
ronyn
2005-08-18 00:17
2005.10.23
Как работать с WM_QUERYENDSESSION?


14-1128013321
Kolan
2005-09-29 21:02
2005.10.23
Кто смотрел 9 роту.


2-1127977419
V-A-V
2005-09-29 11:03
2005.10.23
Помогите разобраться с запросом


14-1127898327
nk
2005-09-28 13:05
2005.10.23
Чем можно открыть автокадовские файлы... кроме автокада ?!! ))


14-1127991178
pazitron_brain
2005-09-29 14:52
2005.10.23
Меня достала банда.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский