Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Funktion für leftstr / rightstr etc mit WideStrings (https://www.delphipraxis.net/207831-funktion-fuer-leftstr-rightstr-etc-mit-widestrings.html)

myicq 7. Mai 2021 14:37

Funktion für leftstr / rightstr etc mit WideStrings
 
Für die, die nicht in D2009 gestiegen sind:

Gibt es eine Funktion irgendwo für leftstr / rightstr etc, was mit Widestrings geht ?

Ich habe es nicht bei strutils, und finde auch nichts im TNT..

Mein Ziel:
Delphi-Quellcode:
   var
     a, b : widestring;

    begin
       a:=tntedt1.text;    //    中华人民共和国
       b:= leftstrw(a, 2); //    &#20013;&#21326;          <<<< nur erste 2, aber nicht 2 byte
    end;

mkinzler 7. Mai 2021 14:58

AW: Funktion für leftstr / rightstr etc mit WideStrings
 
Möglicherweise funktioniert copy()

himitsu 7. Mai 2021 15:40

AW: Funktion für leftstr / rightstr etc mit WideStrings
 
LeftStr aus StrUtils ist String/UnicodeString, aber auch und AnsiString

Copy aus System wird gehn ... ist für Alles (AnsiString/UnicodeString/WideString)

PS: den letzten Parameter kann man weglassen und schon arbeitet es genau so wie LeftStr :zwinker:
RightStr: da muß man, zusammen mit Length, bei Copy selbst berechnen

Es gibt noch zwei "spezielle" Units:
* Delphi-Referenz durchsuchenAnsiStrings
* Delphi-Referenz durchsuchenWideStrings


Über Funktionen für String/UnicodeString werden den WideString zwar natürlich richtig behandeln (beide Unicode),
aber durch das Umkopieren (Parameter:WideString>UnicodeString, Funktion aufrufen und wieder Result:UnicodeString>WideString) natürlich ein paar Nanosekündchen langsamer. (wird wohl meißtens nicht stören)

Bernhard Geyer 7. Mai 2021 17:04

AW: Funktion für leftstr / rightstr etc mit WideStrings
 
Zitat:

Zitat von himitsu (Beitrag 1488841)
Über Funktionen für String/UnicodeString werden den WideString zwar natürlich richtig behandeln (beide Unicode),

Psst. Das ist noch eine Antike-Delphi 6-Version.
Die hatte sowas wie Unicode-Strings noch nicht.
Da musste man sich mit den (Ole)WideStrings herumärgern und evtl. den einen oder anderen Buck in der RTL in Kauf nehmen.

Bernhard Geyer 7. Mai 2021 17:08

AW: Funktion für leftstr / rightstr etc mit WideStrings
 
Evtl. wirst du in der JCL fündig: https://github.com/project-jedi/jcl
Die hat die eine oder andere Unit um auch unter dem antiken Delphi 6 besseren Unicode-Support zu bekommen.

Ältere Versionen vom LMD Elpack haben auch einiges für Unicode + alte Delphi-Versionen
(https://www.lmdinnovative.com/products/vcl/lmdelpack/)

Hatte uns damals geholfen längere Zeit auch mit D6 halbwegs besserbrauchbare Unicode-Unterstützung zu haben.
Sind aber froh mittlerweile den Umsteig auf Post-D2009 (mittlerweile 10.4) gemacht zu haben.
Die IDE+VCL/RTL spart uns gegenüber D6 doch einiges an Zeit ein. Möchten das keinesfalls mehr missen.

himitsu 7. Mai 2021 17:38

AW: Funktion für leftstr / rightstr etc mit WideStrings
 
Ach Mist ... hatte es falsch gelesen. :oops:
Immer diese gemeinen verneinenden Texte.

Dachte er ist von D6 auf neuer als 2009 umgestiegen und sucht nun Ersatz für seinen alten Code.


Ja, vor 2009 gab es nur String/AnsiString (Delphi) und WideString (OLE)
und auch den uralten ShortString (Pascal), der aber auch ANSI ist. (und auch nach 2009 noch ist)

Ydobon 8. Mai 2021 09:18

AW: Funktion für leftstr / rightstr etc mit WideStrings
 
Ich weiß nicht ob der Code dort noch in Ordnung ist, aber damit hatte ich unter Delphi 6 mit Unicode gearbeitet (neben Win-Api und Zeigerspuk). Wolbrink hat den Code irgendwann verkauft, aber das ist noch die alte Freeware-Version.
https://github.com/rofl0r/TntUnicode

Bernhard Geyer 8. Mai 2021 09:41

AW: Funktion für leftstr / rightstr etc mit WideStrings
 
Sein Edit heißt tntedt1.
Ich gehe schwer davon aus das er die TNTs schon im Einsatz hat.

himitsu 8. Mai 2021 10:39

AW: Funktion für leftstr / rightstr etc mit WideStrings
 
Aber das Copy im D6 sollte doch ebenfalls den WideString behandeln? (kann's grad nicht nachsehn, aber bin mir eigentlich ganz sicher)

Delphi-Quellcode:
b := LeftStrW(a, 2);

// wird zu
b := Copy(a, 1, 2);
Intern geht das LeftStr/LeftStrW doch bestimmt eh zum Copy und macht es genauso. :angle:


PS: Bei String/AnsiString mit UTF-8 oder einer chinesischen Codepage drin,
da müsste man z.B. mit MSDN-Library durchsuchenCharNextA oder besser MSDN-Library durchsuchenCharNextExA arbeiten, da ein "Zeichen" mehrere Byte/AnsiChar belegen kann.
Also mehrmals (2) aufrufen und weiterzählen, um die Anzahl für's Copy zu bestimmen, oder man benutzt stattdessen vielleicht MSDN-Library durchsuchenLStrCpyNA.




Nja, selber z.B. mit
Delphi-Quellcode:
CreateWindowW('EDIT', ...)
rumzuspielen, das Edit dann manuell zu behandeln und womöglich auch noch die MessageBehandlung vom Delphi umzubiegen, da vor D2009 bloß ANSI behandelt wurde ... da ist es mit sowas wie den TNT Unicode Controls bestimmt einfacher.
Edit ist noch leicht. Bei ComboBox, ListBox, TreeView und Co. geht der Spaß in der WinAPI (Hier im Forum suchenNonVCL) erst richtig los. :freak:

Und andere Lösungen wie https://www.embarcadero.com/de/products/delphi/starter kennt der TE besimmt auch schon?

Redeemer 9. Mai 2021 12:10

AW: Funktion für leftstr / rightstr etc mit WideStrings
 
Noch eine generelle Warnung: Es gibt in Delphi (wie auch den meisten anderen Sprachen) ohnehin keine Methode, mit der man eine bestimmte Anzahl an Zeichen kopieren kann. Copy, LeftStr, RightStr etc. kopieren eine bestimmte Anzahl an Codeeinheiten, im Falle von Wide- bzw. UnicodeString UTF-16(LE)-Codeeinheiten. Auch die Angabe der Startposition bei Copy (und dessen langsameren Äquivalent MidStr) sind Codeeinheiten. Bei bestimmten Ideogrammen, Emojis usw. ist das unintuitiv. Das von dir gepostete Beispiel enthält aber keine Zeichen, die aus mehrere Codeeinheiten bestehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr.
Seite 1 von 2  1 2      

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