![]() |
Delphi-Version: 2009
String in Record Struktur
Hallo
Gibt es eine Möglichkeit, einen String, der länger als 255 Zeichen ist, in einen Record zu packen und diesen dann in einer Datei zu sichern neben anderen Werten im Record (Bool, Integer etc.)? Wenn ich Strings mit Größenangabe nutze, dann geht das, aber wenn ich nur als String definiere, wird nur der Pointer abgespeichert. OK, ich könnte auch eine XML Datei nutzen, wollte das aber vermeiden. |
AW: String in Record Struktur
Definiere den string doch als Array of ...
|
AW: String in Record Struktur
Schreib einfach LoadFromStream und SaveToStream Methoden, dann musst du nicht mit unflexiblen Records in der Datei arbeiten:
![]() |
AW: String in Record Struktur
ein
Delphi-Quellcode:
und dazu einen Property als String, welcher auf diesen Array weiterleitet.
Array[...] of Char
|
AW: String in Record Struktur
Danke für die Antworten.
Werde mal sehen, welche ich umsetzen kann. Gruß Matthias |
AW: String in Record Struktur
Im enteffekt willst du ja einen String speichern der größer 255 Zeichen ist (vllt sogar variable.
Mach doch im Record eine Integer-Variable von der Länge. und dan schreibst du den String direkt rein. Das geht mit
Delphi-Quellcode:
Also im record die länge des strings speichern und dann den String schreiben. Beim lesen erst record lesen und dann musst du den Speicher zum lesen in eine String-variable festlegen.
Stream.Write(String[1],Länge);
Hier eine kurze Funktion zum Prinzip. Die länge ist halt den im record den du erst liesst.
Delphi-Quellcode:
//Schreiben
fs := TFileStream.Create(....,....); try // Erst die Länge fs.Write(dwLen,SizeOf(dwLen)); // Besser SizeOf als direkt 4, falls man den Typ ändert // Dann den eigentlichen Inhalt fs.Write(sBuf[1],dwLen); finally fs.Free; end; // Lesen fs := TFileStream.Create(....,....); try // Erst die Länge fs.Read(dwLen,SizeOf(dwLen)); // Jetzt muss erst mal der Lesebuffer initialisiert werden sBuf := StringOfChar(#00,dwLen); // oder SetLength(sBuf,dwLen), aber dann ist der Speicher nicht initalisiert fs.Read(sBuf[1],dwLen); |
AW: String in Record Struktur
Zitat:
Das Auslesen kommt morgen dran. |
AW: String in Record Struktur
Ist zwar leicht OT aber trotzdem :)
Ohne beurteilen zu können ob die Records für das Projekt zwingend erforderlich sind, wäre mein Vorschlag im Bezug auf das Speichern und Laden - und auch den Zugriff via GUI - auch mal über ein TClientDataSet nachzudenken, ob das nicht viel besser passen würde als das Konstrukt mit den Records. |
AW: String in Record Struktur
Zitat:
Das halte ich für die sinnvollere Lösung. |
AW: String in Record Struktur
Zumal Delphi-Strings ihre Länge doch eh schon mit sich tragen - wenn wir schon bei der "ToFile()"-Record-Methode sind. Length(MyString) ist letztlich nichts anderes als "PInteger(@MyString[1]-4)^", womit der Längen-Integer implizit ohnehin schon immer vorm String steht. Und zudem via Sprachfeature "Length()" hübsch auswertbar :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz