![]() |
AW: String-Ende mit while finden
Ok, dann werde ich vorher auf PChar casten, danke.
|
AW: String-Ende mit while finden
Die Hilfe schreibt inzwischen auch mal mehr zu den früher geheimen Internas.
![]() Und der geheime Typ StrRec in der System.pas |
AW: String-Ende mit while finden
Danke :)
lg Caps |
AW: String-Ende mit while finden
Zitat:
|
AW: String-Ende mit while finden
für akademische zwecke, hier noch ein kurzer
![]() |
AW: String-Ende mit while finden
Zitat:
Delphi-Quellcode:
Was kommt denn dabei jetzt raus?
var
s : String; begin s := '>' + #13#10#13#10#13#10 + '<'; ShowMessage(Format('%s ist %d Zeichen lang.',[s,Length(s)])); end;
Code:
---------------------------
Editor --------------------------- > < ist 8 Zeichen lang. --------------------------- OK --------------------------- |
AW: String-Ende mit while finden
Nur nochmal zur Klärung: Strings und AnsiStrings in Delphi enthalten immer ein abschließendes 0-Zeichen. Daher ist eine Umwandlung in PChar bzw. PAnsiChar nicht nötig. Allerdings muss man aufpassen, wenn man den String an diesem Punkt indiziert, da das 0-Byte bzw. 0-Word außerhalb des gültigen Bereichs liegt. Zur Not kann man dann aber die Bereichsprüfung abschalten.
![]() |
AW: String-Ende mit while finden
Ja, es zählt die Zeichen, und sollte ein Zeilenumbruch 2 Zeichen lang sein, dann sind das eben auch 2 Zeichen und nicht 1.
Man darf vorher gern #13#10 durch #10 ersetzen, oder man muß die Zählfunktion anpassen. Zitat:
|
AW: String-Ende mit while finden
Zitat:
Das ist genau das Verhalten, was ich erwarten würde; Length zählt die Umbrüche mit. Etwas anderes hätte mich gewundert. lg Caps |
AW: String-Ende mit while finden
Delphi-Quellcode:
Tja, wenn man die Char's zählt, dann bekommt man eben auch die Anzahl der Chars.
'>'#13#10#13#10#13#10'<' = 8
'>'#10#10#10'<' = 6 'hätte' = 5 'ha'#$0308'tte' = 6 Im Notfall muß man eben vorher den String "normalisieren", wenn man was Anderes haben will. Denn egal ob ich #13#10 als EINS zähle oder ob ä und ä (a¨ > Combining Diaeresis) für "mich" das Gleiche sind, für den Computer ist es das nur dann, wenn ich es ihm sage.
Delphi-Quellcode:
if 'hätte' = 'ha'#$0308'tte' then // das hier schmeißt direkt der Compiler raus
Sleep(100){False}; S := 'ha'#$0308'tte'; if 'hätte' = S then // ähnlich CompareStringOrdinal Sleep(100){False}; if CompareStringOrdinal('hätte', 5, 'ha'#$0308'tte', 6, False) = CSTR_EQUAL then Sleep(100){False}; if CompareString(LOCALE_USER_DEFAULT, LINGUISTIC_IGNOREDIACRITIC, 'hätte', 5, 'ha'#$0308'tte', 6) = CSTR_EQUAL then Sleep(100){True}; ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 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