AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TRecordFile - Records per "Bauplan" in Dateien speichern
Thema durchsuchen
Ansicht
Themen-Optionen

TRecordFile - Records per "Bauplan" in Dateien speichern

Ein Thema von 3_of_8 · begonnen am 18. Jan 2007 · letzter Beitrag vom 19. Jan 2007
Antwort Antwort
Benutzerbild von 3_of_8
3_of_8
Registriert seit: 22. Mär 2005
Morgen.

Ich hab mir schon lange mal sowas gewünscht wie "Objektpersistenz" (<-Anführungszeichen) bei Records. Das heißt, ich habe eine Klasse mit Methoden, die ich Aufrufe, dabei meinen Record übergebe, und der kann das in eine Datei speichern und auch daraus wieder laden.

Kann sein, dass ich mit diesem Wunsch ziemlich alleine dastehe, aber ich hab das trotzdem mal programmiert.

Es funktioniert im Prinzip so:
Man "registriert" eine Art Bauplan für jeden Record-Typen, den man speichern will. Dieser besteht aus dem Namen des Recordtyps und aus "Feldern", die jeweils auch einen Namen haben sowie einen Typen.

Dieser Record:

Delphi-Quellcode:
  TTestRec=record
    a, b, c, d: Integer;
    e: String[6];
    f: Single;
  end;
...lässt sich dem TRecordFile so "beibringen":

Delphi-Quellcode:
type
  TTestRecStructure=class(TRecordStructure)
  protected
    procedure CreateStructureFields; override;
  public
    class function GetRecordTypeName: String; override;
  end;

implementation

class function TTestRecStructure.GetRecordTypeName: String;
begin
  Result:='TTestRec';
end;

procedure TTestRecStructure.CreateStructureFields;
begin
  Add(TRecordStaticField.Create('a', 0, ftInteger));
  Add(TRecordStaticField.Create('b', 4, ftInteger));
  Add(TRecordStaticField.Create('c', 8, ftInteger));
  Add(TRecordStaticField.Create('d', 12, ftInteger));
  Add(TRecordStaticField.Create('e', 17, ftString, 6));
  Add(TRecordStaticField.Create('f', 24, ftSingle));
end;

initialization
begin
  RegisterStructureClass(TTestRecStructure);
end;

end.
Das ganze funktioniert momentan nur mit statischen Records (d.h. keine Strings oder Arrays mit Finalisation) und auch nur speichern, nicht laden (das kommt morgen... äh, heute) und außerdem nur mit recht ungeeigneten INI-Files.

Wird noch verbessert.

Folgende Typen sind eingebaut:
ftShortint, ftSmallint, ftLongint, ftInt64, ftByte, ftWord, ftLongWord, ftSingle, ftDouble, tExtended, ftReal48, ftComp, ftCurrency, ftString, ftBinary

ftBinary ist für statische Arrays oder sowas gedacht, würde ich aber momentan noch nicht empfehlen, da INI-Files sehr empfindlich bei Steuerzeichen, wie sie in Binärdaten gerne vorkommen, sind.

Project1.dpr und Unit1.pas sind das Testprogramm, Test.pas ist die Unit, die das TTestRec deklariert und die TTestRecStructure bereitstellt, also den "Bauplan" von TTestRec und RecordFile.pas ist der Quellcode der verwendeten Klasse.
Angehängte Dateien
Dateityp: zip stundenplan_759.zip (210,9 KB, 27x aufgerufen)
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
 
Benutzerbild von inherited
inherited

 
Turbo Delphi für Win32
 
#2
  Alt 19. Jan 2007, 10:05
Das speichern zumindest klappt wunderbar. Nur ein bisschen zu kompliziert ist mir das noch^^
Nikolai Wyderka
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz