Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi verschiedene Datentypen speichern ? (https://www.delphipraxis.net/33057-verschiedene-datentypen-speichern.html)

Urba 1. Nov 2004 01:40


verschiedene Datentypen speichern ?
 
Hallo Leute,

Ich habe in meinem Programm mehrere Arrays welche wiederum verschiedene Datentypen beinhalten. Diese Daten sollen gespeichert werden. Nun habe ich das bisher mit normalen Textfiles gemacht und das klappt auch recht gut, allerding sind sie doch etwas sehr schnell sehr groß. Dieses Problem würde ich gerne umgehen indem ich eine andere Speichermethode schreibe.

ich will also direkt die Bytes in die Datei schreiben. Wie das geht weiß ich schon, mein Problem liegt an der Umwandlung der verschiedenen Datentypen. Wenn ich einen Datentyp "Byte" habe stellt das ja nicht allzu große Probleme dar :) aber bei Typen wie Integer oder sogar Int64 und Fließkommazahlen vom Typ Single oder Double. Wie wandle ich diese Zahlentypen am besten um damit ich sie schön speichern kann ?

Wenn jemand einen besseren Vorschlag hat wie ich mein Problem (allgemein das mit dem Speichern) lösen kann dann nichts wie raus damit - bin für alles offen.

Also schonmal vielen Dank

Gruss
Urba

Luckie 1. Nov 2004 02:07

Re: verschiedene Datentypen speichern ?
 
Zitat:

Zitat von Urba
Ich habe in meinem Programm mehrere Arrays welche wiederum verschiedene Datentypen beinhalten.

Wie darf ich mir das vorstellen? Zeig mal die Deklaration.

Typisierte Dateien (Records) kann man bequem mit einen Stream wegspeichern.

Urba 1. Nov 2004 02:20

Re: verschiedene Datentypen speichern ?
 
Hallo,

Ungefähr so ...

Delphi-Quellcode:
type
  TBsp = class
    a : String;
    b : Byte;
    c : Int64
    d : Word;
    e : Single;
  end;

  var
    a : array [1..10000] of TBsp;
Hoffe das hilft beim Verständnis...

Gruss
Urba

Sharky 1. Nov 2004 05:54

Re: verschiedene Datentypen speichern ?
 
Hai Urba,

wie Luckie schon vorgeschlagen hat würde ich das mit einem Stream lösen. Das könnte dann z.B. So aussehen:

Delphi-Quellcode:
type
  TBsp = Packed Record
    a : String[255]; // Sonst geht es Imho nicht
    b : Byte;
    c : Int64;
    d : Word;
    e : Single;
  end;

var
  a : array [1..10000] of TBsp;

// Alle Daten aus dem Array in eine Datei speichern.
procedure TForm1.Button1Click(Sender: TObject);
var
  ndx : Integer;
  stream : TMemoryStream;
begin
  stream := TMemoryStream.Create;
  try
    for ndx := Low(a) to High(a) do // Alle Records im Array durchlaufen
    begin
      stream.Write(a[ndx],Sizeof(TBsp)); // Jeden Record in den Stream kopieren
    end;
    stream.SaveToFile('c:\meinedaten.dat'); // Stream speichern
  finally
    stream.Free;
  end;
end;

Urba 1. Nov 2004 15:23

Re: verschiedene Datentypen speichern ?
 
Hallo Leute,

Danke für den Hinweis aber ich glaube den kann ich nicht komplett ausnutzen, weil es sich bei mir ja um Klassen handelt und nicht um Records. Bei einigen tausend Arrayeinträgen fällt es schon etwas ins Gewicht ob der Eintrag im Array "nil" (class) ist oder ob die Daten mit dem Minimalwert eingetragen sind (record). Ausserdem prüfe ich mittlerweile in allen Funktionen die auf die verschiedenen Arrays zugreifen a[xy] = nil als Schlussabfrage. Dies müsste ich aber ALLES wieder umschreiben.

Gäbe es da nicht eine andere Lösung ?

Gruss
Urba


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