AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Stringvergleich nicht wie gewünscht
Thema durchsuchen
Ansicht
Themen-Optionen

Stringvergleich nicht wie gewünscht

Ein Thema von padavan · begonnen am 6. Okt 2005 · letzter Beitrag vom 7. Okt 2005
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#1

Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 07:07
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?
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#2

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 07:13
Aehm, CompareStr gibt einen Integer zurück und keinen Boolean! Kuck mal in der OH!
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 07:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 07:26
warum nicht der einfache weg:
Delphi-Quellcode:
if string1 = string2 then
begin
  ....
end;
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
KLS

Registriert seit: 20. Jun 2004
Ort: Berlin
89 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 07:28
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.
Thomas H.
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#6

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 07:30
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)));
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 07:39
@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...

Kann´s erst heute Abend wieder testen, aber sag mal, hat er mit -37 evtl. nur die Groß-Kleinscheibung angemeckert?


Danke euch!
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#8

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 08:02
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
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 08:11
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!
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#10

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 08:27
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.
Christoph
char l[]="\xd6N\x96\xa6\xe6\xce.\xa6\xe4\xce\x04N\x86\xae\ xce\xfc",I,*i=l-1;for(;I=3,*i
++;){while(*i=*i&~(1<<I|1<<7-I)|(*i&1<<I)<<7-2*I|(*i&1<<7-I)>>7-2*I,I--);}puts(l);
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 Uhr.
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