Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Stringvergleich nicht wie gewünscht (https://www.delphipraxis.net/54532-stringvergleich-nicht-wie-gewuenscht.html)

padavan 6. Okt 2005 07:07


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?

dfried 6. Okt 2005 07:13

Re: Stringvergleich nicht wie gewünscht
 
Aehm, CompareStr gibt einen Integer zurück und keinen Boolean! Kuck mal in der OH!

padavan 6. Okt 2005 07:23

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.

RavenIV 6. Okt 2005 07:26

Re: Stringvergleich nicht wie gewünscht
 
warum nicht der einfache weg:
Delphi-Quellcode:
if string1 = string2 then
begin
  ....
end;

KLS 6. Okt 2005 07:28

Re: Stringvergleich nicht wie gewünscht
 
Zitat:

Zitat von RavenIV
warum nicht der einfache weg:
Delphi-Quellcode:
if string1 = string2 then
begin
  ....
end;

Das beachtet die Gross-/Kleinschreibung nicht.

EDIT: ^^ Wie unten beschrieben ist diese Aussage scheinbar falsch. Muss ich wohl selbst nochmal testen.

dfried 6. Okt 2005 07:30

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)));

padavan 6. Okt 2005 07:39

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!

dfried 6. Okt 2005 08:02

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

padavan 6. Okt 2005 08:11

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

ripper8472 6. Okt 2005 08:27

Re: Stringvergleich nicht wie gewünscht
 
Code:
int stricmp(const char *a, const char *b)
{
    int res;
    while (!(res = tolower(*a) - tolower(*b)) && *a++ && *b++);
    return res;
}
wenn das einer nach delphi uebersetzen kann, viel spass damit. hab ich ausm netz gefischt.
funktioniert eventuell besser als das vorgefertigte etwas aus der borland-trickkiste.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr.
Seite 1 von 4  1 23     Letzte »    

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