Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateitypen (https://www.delphipraxis.net/38410-dateitypen.html)

TheMiller 18. Jan 2005 23:16


Dateitypen
 
Hallo,

ich suche eine Art, Daten mit längeren Strings zu speichern. Eine Datei, die sehr lange String und Integer-Werte speichern kann. Geht ja mit den records nicht. Habe auch schon mit XML gearbeitet, aber das ist auch nicht so das Gelbe vom Ei.

Wäre für Hilfe Dankbar!

Oxmyx 18. Jan 2005 23:37

Re: Dateitypen
 
Was spricht dagegen, Strings einfach im Textformat zu speichern? Da kannst du bis zu 2 GB Text am Stück speichern.

supermuckl 18. Jan 2005 23:48

Re: Dateitypen
 
Geht ja mit den records nicht <- ?

Robert_G 19. Jan 2005 00:59

Re: Dateitypen
 
Zitat:

Zitat von supermuckl
Geht ja mit den records nicht <- ?

Wenn interessieren auch schon records. ;)

@Topic

Da hat wohl einer die CodeLib vergessen. ;)
Da findet man nämlich so schöne Sache wie die dpCollection.
Vergesse also einfach ganz schnell, dass es sowas wie records gibt. ;)
Leite deine Klasse von TCollectionItem ab und alles, was gespeichert werden soll deklarierst du als published property.

Delphi-Quellcode:
unit uPerson;

interface
uses
   Classes,
   dpCollection;

type TBeruf = (Entwickler, Maurer, Imperator);

type TPerson = class(TCollectionItem)
   private
      fVorname: string;
      fBeruf: TBeruf;
   published
      property Vorname: string read fVorname write fVorname;
      property Beruf: TBeruf read fBeruf write fBeruf;
   end;

{$DEFINE TYPED_DP_COLLECTION_TEMPLATE}
type _COLLECTION_ITEM_ = TPerson;
{$INCLUDE dpCollection_tmpl.pas}
   TPersonCollection = _COLLECTION_;

implementation
{$INCLUDE dpCollection_tmpl.pas}
end.

Delphi-Quellcode:
var
   newPerson: TPerson;
   Personen: TPersonCollection;
const
   FileName = 'Personen.dfm';

begin
   Personen := TPersonCollection.Create();

   newPerson := Personen.Add;
   with newPerson do
   begin
      Vorname := 'Robert';
      Beruf := Entwickler;
   end;

   Personen.SaveToFile('Personen.dfm');
end.
Gespeichert wird:
Code:
object COLLECTION_: _COLLECTION_
  items = <
    item
      Vorname = 'Robert'
      Beruf = Entwickler
    end>
end
Klingt noch nicht sonderlich cool, oder?
hmmm..., stelle dir vor, du musst deine Klasse später erweitern:
Delphi-Quellcode:
   private
      fName: string;
      ...
   published
      property Name: string read fName write fName;
      ...
Genau hier versagt ein File Of [Datentyp].
Mit der dpCollection ist das kein Problem. :)
Delphi-Quellcode:
   Personen.LoadFromFile('Personen.dfm'); //lade alte Daten
   newPerson := Personen.Add;
   with newPerson do
   begin
      Vorname := 'Hans';
      Name   := 'Schröder'; // neue Eigenschaft!
      Beruf  := Maurer;
   end;

   Personen.SaveToFile('Personen.dfm'); // zurück schreiben
Jetzt haben wir:
Code:
object COLLECTION_: _COLLECTION_
  items = <
    item
      Vorname = 'Robert'
      Beruf = Entwickler
    end
    item
      Name = 'Schr'#246'der'
      Vorname = 'Hans'
      Beruf = Maurer
    end>
end
Die Collection ist also vollständig abwärtskompatibel. :)

oder ums es kleiner zu bekommen:
Delphi-Quellcode:
Personen.Binary := True;
Code:
TPF0 _COLLECTION_ COLLECTION_itemsVornameRobertBeruf
Entwickler Name      SchröderVornameHansBeruf
Maurer

DP-Maintenance 19. Jan 2005 08:54

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "VCL-Komponenten und Controls" nach "Object-Pascal / Delphi-Language" verschoben.
Von einem netten Moderator verschoben ;-)
Passt nicht so wirklich zu VCL.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 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