Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi 2009/2010 Stringhandling (https://www.delphipraxis.net/139844-delphi-2009-2010-stringhandling.html)

Peter666 6. Sep 2009 21:00


Delphi 2009/2010 Stringhandling
 
Hallo,

beim Portieren einige meiner alten Projekte nach Delphi 2010 ist mir eine Sache übel aufgestoßen. Früher funktionierte die Umwandlung eines Array of Char in einen String problemlos:

Delphi-Quellcode:
var
 Arr: Array[0..12] of char;
 str: string;

...
 Arr := str;
Das geht leider nicht mehr und ich musste auf folgendes Hilfskonstrukt umschwenken:


Delphi-Quellcode:
procedure StringToArray(const S: AnsiString; out Arr: Array of AnsiChar);overload;
begin
  fillchar(Arr, sizeof(Arr), 0);
  move(S[1], Arr, min(length(S),sizeof(arr)));
end;

procedure StringToArray(const S: String; out Arr: Array of Char);overload;
begin
  fillchar(Arr, sizeof(Arr), 0);
  move(S[1], Arr, min(length(S),sizeof(arr)));
end;
Kennt ihr eventuell eine elegantere Lösung zum Umfahren dieses Problems?

Peter

jaenicke 6. Sep 2009 21:20

Re: Delphi 2009/2010 Stringhandling
 
Muss das denn ein Array sein? Eigentlich kann man auf einen String doch ohnehin wie auf ein Array zugreifen. :gruebel:

jbg 6. Sep 2009 21:20

Re: Delphi 2009/2010 Stringhandling
 
Zitat:

Zitat von Peter666
Früher funktionierte die Umwandlung eines Array of Char in einen String problemlos:

Von wieviel früher redest du da? Also das kann nicht mal Delphi 7. Die andere Richtung kann Delphi, aber einen String in ein Array quetschen hat noch kein Delphi unterstützt.

Zitat:

und ich musste auf folgendes Hilfskonstrukt umschwenken:
StrLCopy/StrCopy ist dein Freund.

Peter666 6. Sep 2009 21:49

Re: Delphi 2009/2010 Stringhandling
 
Danke, stimmt das Problem war eigentlich ein anderes. Ich war zu faul die mehreren MB großen Projektdaten anzupassen und habe dann ein eigenes Skript zum Updaten geschrieben. Das hat aus
Datensatz: string[63] automatisch ein Datensatz: Array[0..62] of AnsiChar kreiiert, da AnsiString[63] nicht funktioniert.
Nun gibt es in etlichen Klassen Probleme, da just die festen Datensätze, die aus der verwendeten Pluginschnittstelle resultieren, nicht mehr passen. Ich kann da leider auch nicht Widestring verwenden, da ansonsten die Abwärtskompatibilität leidet.

Peter

jaenicke 6. Sep 2009 22:05

Re: Delphi 2009/2010 Stringhandling
 
Zitat:

Zitat von Peter666
da AnsiString[63] nicht funktioniert.

String[63] ist nach wie vor ein ShortString, kein UnicodeString. ;-)


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