Форум: "Начинающим";
Текущий архив: 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.034 c