![]() |
Delphi-Version: XE6
Stringvergleich
Hallo Zusammen,
ich hatte gestern ein komisches Ereignis beim Stringvergleich in Delphi. Wir haben eine Funktion wo wir ein String reingeben und aus einer XML die passende Farbe gesucht wird. Leider hatte nie die Farbe gefunden. Dann wollte ich schauen ob die Funktion überhaupt alle Elemente meiner XML Durchgeht. Als ich die Überprüfung eingebaut hatte funktionierte die Funktion aber auf einmal ohne Probleme. Als ich meine Änderungen wieder verworfen habe auch. Habt ihr eine Idee woran es liegen könnte? In der Funktion wird mit der "SameText" Funktion verglichen ob die Strings gleich sind. Diese Methode arbeitet mit Pointer. Ich weiß das in Java und C# es zu Problemen kommen kann wenn man Strings mit == vergleicht weil man dort auch nur Zeiger vergleicht. Wie sollte man Strings vergleichen in Delphi. SameText(aStringValue,aOhtervariable), aStringValue.equals(aOhtervariable) oder einfach aStringValue = aOhtervariable? Danke und einen schönen Tag. |
AW: Stringvergleich
Unicode berücksichtigt?
|
AW: Stringvergleich
Ja außerdem haben die betroffenen Zeichenketten auch nur die Standard ASCII Zeichen. Wir verwenden die Gleiche Routine oft auch für Kyrillische Zeichen und so weiter. Die Funktion ist schon lange im Einsatz und sollte eigentlich keine Probleme machen. Sind auf jedenfalls noch nie aufgefallen.
|
AW: Stringvergleich
Hallo,
sicher, dass du nicht eine andere Xml-Datei durchsucht hast? |
AW: Stringvergleich
Auch das ich ne andere Datei genommen habe kann ich Ausschließen. Die Files sind Hersteller abhängig, wenn es die falsche Datei ist wird eine Exception geworfen.
|
AW: Stringvergleich
Zitat:
Delphi-Quellcode:
auf. Ausnahme sind die Eingangbedingung, in der geprüft wird, ob die Pointer der Strings gleich sind.
comparetext(S1,S2)=0
|
AW: Stringvergleich
Ein Stück Quellcode wäre nicht schlecht.
|
AW: Stringvergleich
Zitat:
aStringValue.equals macht intern auch nur einen direkten Vergleich. Der Compiler ist clever genug, eine interne Methode dafür aufzurufen. Also, abgesehen von der case-sensitive Einschränkung bei SameText, sind alle Stringvergleiche zulässig und führen zum gewünschten Ergebnis. Dein Problem liegt also irgendwo anders. |
AW: Stringvergleich
Zitat:
CaseInsensitiv oder CaseSensitiv?
Delphi-Quellcode:
Fazit: es ist egal, was man nimmt, da in Delphi die "LongStrings" AnsiString und UnicodeString intern zwar "Zeiger" sind, aber der Compiler das beachtet und verwendet dann z.B. Funktionen ala _LStrCmp und _LStrEqual aus der System.pas.
{Ansi}SameStr(A, B) = (A = B)
{Ansi}SameText(A, B) = (AnsiLowerCase(A) = AnsiLowerCase(B)) Was mich eher interessiert, "wo" oder besser wie kommt ihr an die Vergleichsstrings? XML? Manuell den Text parsen oder 'ne XML-Komponente verwendet? |
AW: Stringvergleich
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:08 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 by Thomas Breitkreuz