![]() |
Stringvergleich nicht wie gewünscht
Moin,
mir ist was unklar bzgl. den Vergleichsfunktionen bei Strings. Ich möchte zwei Strings miteinander vergleichen, z.B. zwei mal Edit.Text Nun gibt´s ja verschiedene Möglichkeiten, da ich aber wollte, dass groß/klein interessiert, habe ich comparestring benutzt und nicht etwa comparetext. Nun dachte ich weiterhin, dass diese Funktion tatsächlich auch auf die gleiche Länge achtet. Scheinbar ist das nicht so. Edit1.text := 'Test' und Edit2.text := 'testaaaa' Der Vergleich zwischen den beiden liefert true - warum? Und wie mach ich´s richtig? Muss ich da tatsächlich jedes Zeichen auf Ascii Ebene durchforsten? |
Re: Stringvergleich nicht wie gewünscht
Aehm, CompareStr gibt einen Integer zurück und keinen Boolean! Kuck mal in der OH!
|
Re: Stringvergleich nicht wie gewünscht
Danke, weiß ich.
Sollte eine sinngemäße Erklärung sein. Gibt 0 bei Gleichheit zurück. Stände in der OH die Lösung hät ich hier nicht gefragt. |
Re: Stringvergleich nicht wie gewünscht
warum nicht der einfache weg:
Delphi-Quellcode:
if string1 = string2 then
begin .... end; |
Re: Stringvergleich nicht wie gewünscht
Zitat:
EDIT: ^^ Wie unten beschrieben ist diese Aussage scheinbar falsch. Muss ich wohl selbst nochmal testen. |
Re: Stringvergleich nicht wie gewünscht
Also bei mir kommt bei folgendem Code als ergebnis -32 raus (D7 Enterprise):
Delphi-Quellcode:
Ed1.text := 'Test'; Ed2.text := 'testaaaa'; ShowMessage(IntToStr(CompareStr(ed1.Text, ed2.Text))); |
Re: Stringvergleich nicht wie gewünscht
@dfried
ich gebe zu diesen letzten Test mir Showmessage Gester nicht mehr ausprobiert hab, letzter Test vor´m Abschalten war nur noch unter "reelen" Bedingungen und da hat´s nicht geklappt. Hab vielleicht noch einen anderen Fehler... :shock: Kann´s erst heute Abend wieder testen, aber sag mal, hat er mit -37 evtl. nur die Groß-Kleinscheibung angemeckert? Danke euch! |
Re: Stringvergleich nicht wie gewünscht
Hab mal ein bisserl getestet, so wie's aussieht hört der Vergleich nach dem ersten unterschiedlichen Zeichen auf und gibt die Differenz der beiden Ordinalwerte der Zeichen zurück.
Das würde das Ergebnis -32 erklären T = Ord(84) / t = Ord(116). Wenn beide Strings bis auf die Länge identisch sind (also z.B. Text1 = 'test', Test2 = 'testaaaa') dann kommt als Ergebnis -4 das würde bedeuten, der erste String ist 4 Zeichen kürzer als der zweite. Bei folgendem Beispiel Text1 = 'testb', Test2 = 'testaaaa' kommt als Ergebnis 1 raus, was wiederum der differenz zwischen Ord(b) = 98 und Ord(a) = 97 entsprechen würde. Wenn du's ganz genau wissen möchtest musst du dir den AssemblerCode in der Sysutils.pas anschaun :) Gruß Daniel |
Re: Stringvergleich nicht wie gewünscht
danke dir,
muss mir nochmal anschauen was ich da gemacht hab, irgenwas hatte immer nicht hingehauen. Erst war Groß-Kein egal, lag aber an CompareText, dann klappte das andere nicht. Was ich aber nicht verstehe, denn es müsste ja eigentlich hinhauen - seh ich ja ein! :-D |
Re: Stringvergleich nicht wie gewünscht
Code:
wenn das einer nach delphi uebersetzen kann, viel spass damit. hab ich ausm netz gefischt.
int stricmp(const char *a, const char *b)
{ int res; while (!(res = tolower(*a) - tolower(*b)) && *a++ && *b++); return res; } funktioniert eventuell besser als das vorgefertigte etwas aus der borland-trickkiste. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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