Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Stringvergleich (https://www.delphipraxis.net/191150-stringvergleich.html)

ngott2 14. Dez 2016 06:54

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.

Luckie 14. Dez 2016 07:13

AW: Stringvergleich
 
Unicode berücksichtigt?

ngott2 14. Dez 2016 07:17

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.

hoika 14. Dez 2016 08:03

AW: Stringvergleich
 
Hallo,
sicher, dass du nicht eine andere Xml-Datei durchsucht hast?

ngott2 14. Dez 2016 08:50

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.

bernau 14. Dez 2016 09:02

AW: Stringvergleich
 
Zitat:

Zitat von ngott2 (Beitrag 1356051)
In der Funktion wird mit der "SameText" Funktion verglichen ob die Strings gleich sind. Diese Methode arbeitet mit Pointer.

Nö. Die Methode arbeitet nicht mit Pointern. Diese Ruft einfach
Delphi-Quellcode:
comparetext(S1,S2)=0
auf. Ausnahme sind die Eingangbedingung, in der geprüft wird, ob die Pointer der Strings gleich sind.

bernau 14. Dez 2016 09:03

AW: Stringvergleich
 
Ein Stück Quellcode wäre nicht schlecht.

Uwe Raabe 14. Dez 2016 09:09

AW: Stringvergleich
 
Zitat:

Zitat von ngott2 (Beitrag 1356051)
Wie sollte man Strings vergleichen in Delphi. SameText(aStringValue,aOhtervariable), aStringValue.equals(aOhtervariable) oder einfach aStringValue = aOhtervariable?

SameText ignoriert Groß-/Kleinschreibung.

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.

himitsu 14. Dez 2016 09:45

AW: Stringvergleich
 
Zitat:

Zitat von ngott2 (Beitrag 1356051)
Wie sollte man Strings vergleichen in Delphi. SameText(aStringValue,aOhtervariable), aStringValue.equals(aOhtervariable) oder einfach aStringValue = aOhtervariable?

Das passt nicht zusammen.
CaseInsensitiv oder CaseSensitiv?
Delphi-Quellcode:
{Ansi}SameStr(A, B) = (A = B)
{Ansi}SameText(A, B) = (AnsiLowerCase(A) = AnsiLowerCase(B))
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.

Was mich eher interessiert, "wo" oder besser wie kommt ihr an die Vergleichsstrings?
XML? Manuell den Text parsen oder 'ne XML-Komponente verwendet?

Blup 14. Dez 2016 10:20

AW: Stringvergleich
 
Zitat:

Zitat von ngott2 (Beitrag 1356051)
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?

Mit einem Versionskontrollsystem könnte man jetzt einfach nachschaun, welche Änderung tatsächlich zu diesem Resultat geführt hat.


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