AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Unicode-String im Record speichern

Ein Thema von Gagamba · begonnen am 28. Aug 2012 · letzter Beitrag vom 28. Aug 2012
Antwort Antwort
Seite 1 von 3  1 23   
Gagamba

Registriert seit: 25. Jun 2012
19 Beiträge
 
#1

Unicode-String im Record speichern

  Alt 28. Aug 2012, 10:35
Hallo,
ich stelle grade von Delphi7 auf Delphi9. Dabei gibt es jetzt (wie erwartet) Probleme mit Unicode bzw. Widestring.
einfaches Codebeispiel:

Delphi-Quellcode:
TYPE Datenrecord = RECORD
 Name : STRING;
 Jahr : INTEGER;
 END;
VAR AlleDaten : ARRAY [1..MaxDaten] OF Datenrecord;
Das Sichern/Laden geht standardmäßig über eine Datei
VAR Datenfile : FILE OF Datenrecord die konventionell-sequentiell gelesen bzw. geschrieben wird

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

Geändert von mkinzler (28. Aug 2012 um 10:36 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Unicode-String im Record speichern

  Alt 28. Aug 2012, 10:40
Unter Delphi7 war String=Shortstring (wenn man ihn nicht umdefiniert hat)
Wer sagt denn sowas? IIRC ist String schon ab Delphi 2 ein AnsiString, d.h. Dein Record hätte eigentlich nur den Zeiger auf den jeweiligen String enthalten dürfen, nicht aber den String selbst, es sei denn, Du deklarierst ihn als Shortstring. Was passiert denn, wenn Du aus den Strings ein WideChar-Array fester Länge machst?
Name: array[1..300] of WideChar;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.108 Beiträge
 
Delphi 12 Athens
 
#3

AW: Unicode-String im Record speichern

  Alt 28. Aug 2012, 10:56
Nur der Typ String[nr] ist ein ShortString mit Längenangabe und kein AnsiString.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Gagamba

Registriert seit: 25. Jun 2012
19 Beiträge
 
#4

AW: Unicode-String im Record speichern

  Alt 28. Aug 2012, 10:59
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Unicode-String im Record speichern

  Alt 28. Aug 2012, 11:01
Wenn du keine Unicode-Strings hast ist doch die Lösung von himitsu das was du benötigst
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Unicode-String im Record speichern

  Alt 28. Aug 2012, 11:02
Das ist aber kein Problem von Unicode, sondern Bestand bei AnsiString ja auch schon. mach es wie Detlef es vorgeschlagen hat.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Unicode-String im Record speichern

  Alt 28. Aug 2012, 11:12
Das ist aber kein Problem von Unicode, sondern Bestand bei AnsiString ja auch schon. mach es wie Detlef es vorgeschlagen hat.
Jein. Das Problem ist, das es kein Unicode-Äquivalent zu ShortString/string[N] gibt. Klar kann man mit WideChar-Arrays hantieren, aber die kann man halt nicht so einfach als Strings benutzen wie das mit ShortStrings ging (Zuweisungskompatibilität AnsiString <-> ShortString, automatisches Stutzen auf Maximallänge etc.).
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Unicode-String im Record speichern

  Alt 28. Aug 2012, 11:13
@himitsu und DeddyH
da gab es einen Compilerschalter der String=Ansistring oder String=Shortstring auswählen konnte.

Wenn du keine Unicode-Strings hast ist doch die Lösung von himitsu das was du benötigst
!!!!


Dann Nutz doch ein
Delphi-Quellcode:
Tunicodestring = record
                   lange : word;
                   ustr : array[1..255] of widechar;
                 end;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (28. Aug 2012 um 11:16 Uhr)
  Mit Zitat antworten Zitat
Gagamba

Registriert seit: 25. Jun 2012
19 Beiträge
 
#9

AW: Unicode-String im Record speichern

  Alt 28. Aug 2012, 11:20
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!
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#10

AW: Unicode-String im Record speichern

  Alt 28. Aug 2012, 11:30
Oder hat jemand eine andere und/oder bessere Idee?
Danke!
Du könntest gleich auf XML Dateien umstellen. Da hast du i.d.R. kein Problem mit Unicode und bist für zukünftige Erweiterungen gut gerüstet
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:21 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