![]() |
Unicode-String im Record speichern
Hallo,
ich stelle grade von Delphi7 auf Delphi9. Dabei gibt es jetzt (wie erwartet) Probleme mit Unicode bzw. Widestring. einfaches Codebeispiel:
Delphi-Quellcode:
Das Sichern/Laden geht standardmäßig über eine Datei
TYPE Datenrecord = RECORD
Name : STRING; Jahr : INTEGER; END; VAR AlleDaten : ARRAY [1..MaxDaten] OF Datenrecord;
Delphi-Quellcode:
die konventionell-sequentiell gelesen bzw. geschrieben wird
VAR Datenfile : FILE OF Datenrecord
Unter Delphi9 wwerden die Strings allerdings nicht mehr in fixer Länge abgespeichert, sondern in ihrer tatsächlichen Länge, was dazu führt, dass die Dateigröße sich laufend ändert, und die Hintereinander-Schachtelung innerhalb des Arrays völlig durcheinander kommt! Unter Delphi7 war String=Shortstring (wenn man ihn nicht umdefiniert hat), jetzt ist es zwingend Widestring. Da auch Chinesen Namen haben, sollte man den Widestring nutzen, also STRING lassen (sonst könnte man die Definition auf STRING[255] o.ä. ändern und hätte keine Probleme). Wie löse ich das, ohne Texte und Daten voneinander trennen zu müssen? Eine Trennung stelle ich mir so vor, dass die Namen in einer TStringlist definiert werden, und auch mit deren Methoden gelesen und gesichert werden. Aber wie gesagt, möchte ich diese Trennung nicht machen.. Vielleicht isses ganz einfach, und ich steh nur auf dem Schlauch? Besten Dank schonmal vorab: Gagamba |
AW: Unicode-String im Record speichern
Zitat:
Delphi-Quellcode:
Name: array[1..300] of WideChar;
|
AW: Unicode-String im Record speichern
Nur der Typ
Delphi-Quellcode:
ist ein ShortString mit Längenangabe und kein AnsiString.
String[nr]
|
AW: Unicode-String im Record speichern
OK, ich hab mich falsch ausgedrückt: ich habe unter Delphi7 und früheren Versionen immer nur Shortstrings verwendet, auch innerhalb von gemischten Datenrecords. So kommt das Problem jetzt zu Stande. Ich möchte ja nicht einen Zeiger auf einen String abspeichern, sondern den Inhalt. Wenn ich nur den Zeiger abspeichere, dann geht der Inhalt ja für die nächste Sitzung verloren...
Danke soweit |
AW: Unicode-String im Record speichern
Wenn du keine Unicode-Strings hast ist doch die Lösung von himitsu das was du benötigst
|
AW: Unicode-String im Record speichern
Das ist aber kein Problem von Unicode, sondern Bestand bei AnsiString ja auch schon. mach es wie Detlef es vorgeschlagen hat.
|
AW: Unicode-String im Record speichern
Zitat:
|
AW: Unicode-String im Record speichern
@himitsu und DeddyH
da gab es einen Compilerschalter der String=Ansistring oder String=Shortstring auswählen konnte. Zitat:
Dann Nutz doch ein
Delphi-Quellcode:
Gruß
Tunicodestring = record
lange : word; ustr : array[1..255] of widechar; end; K-H |
AW: Unicode-String im Record speichern
Richtigstellung:
ich hatte BISHER keinen Unicode-String, muss JETZT aber umstellen. Brauche also im Datenrecord einen speicherbaren Stringtyp, der Unicode-kompatibel ist. Sollte das NICHT möglich sein (z.B. via Array .. of Char, da hab ich nicht den Durchblick, ob das wirklich 100% kompatibel ist zum Unicode-String) muss ich vermutlich(?!) numerische Daten von Textdaten trennen und die Textdaten via TStringlist und dessen Methoden lesen und schreiben. Oder hat jemand eine andere und/oder bessere Idee? Danke! |
AW: Unicode-String im Record speichern
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 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