Announcement

Collapse
No announcement yet.

Speichern von Instanzen-Eigenschaften auf Platte

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Speichern von Instanzen-Eigenschaften auf Platte

    Hallo zusammen!

    Ich beginne mich gerade in der ooP zurechtzufinden und stehe vor einem
    Verständnisprobelm:

    Ich habe eine selbstdefinierte Klasse mit bestimmten Eigenschaften definiert. Nun
    möchte ich mit zwar mehreren Instanzen arbeiten aber nicht zugleich, sondern
    nacheinander - eine Instanz wird abgearbeitet und denn kommt die nächste dran. Ich
    möchte jedoch die Möglichkeit berücksichtigen später wieder auf die Daten einzelner
    Instanzen zugreifen zu können. Mit einem Record-Typ wäre dies zwar relativ
    problemlos, aber ich will ja nun mit ooP spielen.
    Ich stehe im Moment vor der Möglichkeit die abgearbeitete Instanz an einen gleich bebauten Record-Typ zu überweisen und dann mit einem File-of-Record zu arbeiten. Dies ist eine zu plumpe Methode um der Weisheit letzter Schluß zu sein.
    Auf der anderen Seite steht in den Büchern das Stichwort TStream - dies allerdings immer in Verbindung mit Komponenten und die fehlen meinem Objekt.
    Es wäre prima, wenn mir jemend einen Tip geben könnte!

    Dank und Gruß Andreas

  • #2
    Hallo,<br><br>
    also, ich würde das so machen, daß ich die Eigenschaften/Daten einer Instanz in einen Puffer schreibe. TMemoryStream würde sich da anbieten.<br>
    Irgendwie so also:<br>
    <pre>
    procedure MyClass.SaveDataToStream(TS:TMemoryStream);
    begin
    TS.Write(Attribut1,sizeOf(Attribut1));
    TS.Write(Attribut2,sizeOf(Attribut2));
    ...
    ...
    TS.Write(AttributN,sizeOf(AttributN));
    end;

    procedure MyClass.LoadDataFromStream(TS:TMemoryStream);
    begin
    TS.Position:=0;
    TS.ReadBuffer(Attribut1,sizeOf(Attribut1));
    TS.ReadBuffer(Attribut2,sizeOf(Attribut2));
    ...
    ...
    TS.ReadBuffer(AttributN,sizeOf(AttributN));
    end;

    </pre>

    Irgendwie so, alternativ kannst du statt TMemoryStream auch TFileStream nehmen, dann werden die Daten auf die HD geschrieben statt in den Speicher, aber würde ich nur machen, wenn du die Daten über das Programmende hinweg noch benötigst, sonst macht das keinen Sinn

    Comment


    • #3
      <pre>type
      TMyClass = class (TComponent) // Aufpassen: ein Kind von TComponent!
      private
      FText : string;
      published
      property Text : string read FText write FText; // Aufpassen: nur published Eigenschaft wird gespeichert.
      end;

      //..........................................

      procedure TForm1.Button1Click(Sender: TObject);
      var s: TStream;
      c : TMyClass;
      begin
      c := TMyClass.Create(nil);
      c.Text := 'Hallo STREAM!';
      s := TStringStream.Create(''); // kann TFileStream, oder TMemoryStream, oder TBlobStream u.s.w. sein…
      s.WriteComponent(c); //Object ist in Stream
      end;</pre&gt

      Comment

      Working...
      X