Entwickler-Ecke
Dateizugriff - Variablen abspeichern
Masterrandy - Mo 07.04.03 15:27
Titel: Variablen abspeichern
Ich habe folgende Records:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type TPosition = record Datei: Integer; Start: Integer; Definition: Boolean; end;
type TAttribute = record Name: String; Typ: Char; Laenge: Integer; Position: array of TPosition; end;
type TDaten = record Dateiinhalt: TMemoryStream; Dateinamen: String; end; |
und damit zwei Variablen:
recAttribute
recDaten
Diese sind mit vielen Daten gefüllt. Wie kann ich diese Daten nun in Dateien abspeichern. Ich möchte aber nicht mehr als zwei Dateien haben, am liebsten nur eine.
Hat jemand eine Idee dazu? Bin für alle Tips offen.
Moderiert von
Klabautermann: Delphi-Tags hinzugefügt.
Klabautermann - Mo 07.04.03 17:52
Hallo,
ersteinmal würde ich dir empfehlen alle Records mit dem Schlüsselwort
Packed versehen. Damit stellst du sicher das die Daten immer den ninimal Platz belegen, egal wie die äußeren umstände sind (Delphi version usw.).
Also Beispielsweise so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| type TPosition = packed record Datei: Integer; Start: Integer; Definition: Boolean; end; |
Dann musst du dir ein Dateiformat ausdenken um mehrere verschiedene Records in die selbe Datei zu bringen.
Z.b. könntest du dir eine Blockheader konstruieren, der Informationen enthällt von welchem Datrentyp der kommende Block ist. Inetwa so:
Delphi-Quelltext
1: 2: 3: 4: 5:
| tBlockHeader = packed recod BlockType : LongInt; BlockSize : Longint; Deleted : Boolean; END; |
Diene Datei baust du dann als
untypisierte Datei so auf, das immer ein Blockheader kommt und danach der Datenblock. Der Trick bei der sache ist, das du in BlockType eine nummer speichers, die angibt ob als nächstes ein TPosition, TAttribute, TDaten Datensatz kommt. In BlockSize steht wie groß dieser Block ist, das diehnt aber eher dazu schneller durch eine solche Datei scrolen zu können und kann vieleicht noch zur Versionskontrolle genutzt werden. Über Deleted kannst du dann ncoh einträge als gelöscht markieren, damit du nicht immer die ganze Datei neu schreiben musst, wenn du einen Datensatz löscht.
Wie gasagt das ist nur eine Lösung. Wenn du zwei Dateien verwendest (Daten und Indexdatei) könntest du das Arbeiten damit warscheinlich noch performanter gestalten.
Begriffe die du zu dem Thema in der Delphi-Hilfe nachschlagen solltest: FILE, AssifnFile, Blokread, Blockwrite, CloseFile, Reset, Rewrite, Dateitypen, tStream, Seek.
Gruß
Klabautermann
ShadowCaster - Di 08.04.03 09:09
| Zitat: |
| ersteinmal würde ich dir empfehlen alle Records mit dem Schlüsselwort Packed versehen |
hm.... ich finde es seltsam dass die ganze delphi-api auf packed aufgebaut ist. Schließlich bedeutet packed auch Geschwindigkeitseinbußen. Warum verwenden alle packed? Mir persönlich gehts immer um Systemperformance und ich verwende nie packed weils gerade komplexe Recordstrukturen langsamer für die Verarbeitung macht.
Könnt mich ja eines anderen belehren.
Masterrandy - Di 08.04.03 10:13
Titel: Gibt es dazu vllt Beispiele?
Erstmal danke an dich Klabautermann für deine Antwort.
Gibt es vllt noch einige Beispiele oder wietere Literatur dazu außer in der Online-Hilfe?
Zur Geschwindigkeit will ich nur soviel sgaen: Hauptsach es tut :wink:
Übrigends: Echt tolles Forum mit Leuten die sich wirklich auskennen!
ShadowCaster - Di 08.04.03 12:24
achso... ok dann verstehe ich
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!