AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Funktion für leftstr / rightstr etc mit WideStrings

Funktion für leftstr / rightstr etc mit WideStrings

Ein Thema von myicq · begonnen am 7. Mai 2021 · letzter Beitrag vom 9. Mai 2021
Antwort Antwort
Seite 1 von 2  1 2   
myicq

Registriert seit: 5. Jan 2016
70 Beiträge
 
Delphi 6 Professional
 
#1

Funktion für leftstr / rightstr etc mit WideStrings

  Alt 7. Mai 2021, 15:37
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); // 中华 <<<< nur erste 2, aber nicht 2 byte
    end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.804 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 7. Mai 2021, 15:58
Möglicherweise funktioniert copy()
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.920 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 7. Mai 2021, 16:40
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
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 7. Mai 2021 um 16:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.934 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 7. Mai 2021, 18:04
Ü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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

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

  Alt 7. Mai 2021, 18:08
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.920 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 7. Mai 2021, 18:38
Ach Mist ... hatte es falsch gelesen.
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 8. Mai 2021 um 12:08 Uhr)
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
245 Beiträge
 
Delphi 10.4 Sydney
 
#7

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

  Alt 8. Mai 2021, 10:18
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.934 Beiträge
 
Delphi 10.4 Sydney
 
#8

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

  Alt 8. Mai 2021, 10:41
Sein Edit heißt tntedt1.
Ich gehe schwer davon aus das er die TNTs schon im Einsatz hat.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.920 Beiträge
 
Delphi 10.4 Sydney
 
#9

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

  Alt 8. Mai 2021, 11:39
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.


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 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.

Und andere Lösungen wie https://www.embarcadero.com/de/products/delphi/starter kennt der TE besimmt auch schon?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 8. Mai 2021 um 12:45 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
812 Beiträge
 
Delphi 2009 Professional
 
#10

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

  Alt 9. Mai 2021, 13:10
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.
Janni
2005 PE, 2009 PA, XE2 PA
  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 21:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf