Autor Beitrag
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mi 26.04.06 15:13 
Hi,
ich habe nur eine kleine Frage:
Ich habe 2 Strings, zB. "AAA" und "BBB". Diese vergleiche ich so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure vergleiche;
var string1,string2:string;
begin
string1:='AAA';
string2:='BBB';
if string1 < string2 then
showmessage(string1+' kommt vor '+string2) else
showmessage(string2+' kommt vor '+string1);
end;


Da wird festgestellt das AAA vor BBB kommt.

Aber hier
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure vergleiche;
var string1,string2:string;
begin
string1:='AAA';
string2:='B';
if string1 < string2 then
showmessage(string1+' kommt vor '+string2) else
showmessage(string2+' kommt vor '+string1);
end;

wird festgestllt das B vor AAA kommt.

Ich möchte gerne, dass die Strings sozusagen nach Alphabet sortiert werden, bzw. dass ich weiß welcher der beiden Strings vor dem Anderen kommen würde, wenn ich sie Alphabetisch sortieren würde.

thx hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 26.04.06 15:20 
Schau dir mal CompareStr oder CompareText an.

_________________
We are, we were and will not be.
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mi 26.04.06 17:14 
Hi, mhh hat bei mir nicht wirklich Lösung gezeigt...

Aber dafür habe ich jetzt einen Anderen Weg gefunden. (Bei schönem Wetter Spazieren gehen hilft da doch schon weiter :D)

Ich stelle das Ganze wie eine Kette vor, gaaaanz links ist A, und gaaanz rechts ist Z.

Dann verwende ich folgendes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function nametoleft(name1,name2:string):boolean;
var x:integer;
begin
  if length(name1) > length(name2) then
      name1:=copy(name1,1,length(name2)) else if
      length(name1) <> length(name2) then
      name2:=copy(name2,1,length(name1));

  if name1 > name2 then
  result:= true else
  result:=false;
end;


Dabei muss man beachten, dass die Parameter einheitlich übergeben werden müssen, also zb. Uppercase

Damit müsste ich eigentlich weiter kommen. Wenn aber einer eine noch bessere Lösung hat, immer her damit :wink:

hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 26.04.06 17:20 
Nur mal so interessehalber: Was funktioniert denn an den beiden Funktionen nicht, die ich angegeben habe?

_________________
We are, we were and will not be.
starsurfer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 334

Win 95, Win 98, Win XP, Win Vista, Linux
D5 Enterprise ,D2005, D6 Personal, Visual C++ Express 2005, C++ Builder 6 E, Dev-C++
BeitragVerfasst: Mi 26.04.06 17:21 
für GANZ faule gibts noch die Möglichkeit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var sortlist:tstringlist;
begin
sortlist:=tstringlist.create;
sortlist.clear;
sortlist.add(stringA);
sortlist.add(stringB);
//und auch weitere strings kannst ran hängen
sortlist.sort;
stringA:=sortlist.string[0];
stringB:=sortlist.string[1];
//jetzt kannste auf deine sortierten strings zugreifen
sortlist.free;
end;

_________________
GEIZ IST GEIL! - Ihr Sozialamt


Zuletzt bearbeitet von starsurfer am Mi 26.04.06 17:24, insgesamt 1-mal bearbeitet
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Mi 26.04.06 17:22 
Hallo! :wink2:

user profile iconhibbert hat folgendes geschrieben:
Aber hier
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure vergleiche;
var string1,string2:string;
begin
string1:='AAA';
string2:='B';
if string1 < string2 then
showmessage(string1+' kommt vor '+string2) else
showmessage(string2+' kommt vor '+string1);
end;

wird festgestllt das B vor AAA kommt.


Bei mir nicht. :gruebel:

_________________
Ein Nutzer der Ecke ;-)
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mi 26.04.06 18:00 
user profile iconMartin1966 hat folgendes geschrieben:

Bei mir nicht. :gruebel:


mhh kann auch sein das es andersrum ist/war. Das Beispiel habe ich nur schnell aus dem Kopf aufgeschrieben... versuch es mal andersrum, wenn das nicht geht, dann sollte die andere Procedure weiterhelfen.

@Gausi:
Wenn ich es richtig verstanden habe, ist string1 vor String2 wenn CompareStr einen Wert < 0 zurück gibt. Und irgendwie wollte das bei mir nicht, habe leider selber keine genaue Ahnung, warum nicht. Ich habe es so versucht:
ausblenden Delphi-Quelltext
1:
2:
if CompareStr(String1,string2) < 0 then
tausche(string2,string1);


@starsurfer:
Eine Stringlist hilft mir nicht wirklich weiter, da ich Strings aus einem Record vergleichen muss und ich irgendwie die anderen Daten aus dem Record mit verschieben muss, aber trotzdem danke :wink:

hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mi 26.04.06 19:15 
user profile iconhibbert hat folgendes geschrieben:

@Gausi:
Wenn ich es richtig verstanden habe, ist string1 vor String2 wenn CompareStr einen Wert < 0 zurück gibt. Und irgendwie wollte das bei mir nicht, habe leider selber keine genaue Ahnung, warum nicht. Ich habe es so versucht:
ausblenden Delphi-Quelltext
1:
2:
if CompareStr(String1,string2) < 0 then
tausche(string2,string1);

Auch wenn ich nicht Gausi bin:

CompareStr beachtet die Groß-/Kleinschreibung. Wie Gausi schon gesagt hatte, solltest du, wenn du das nicht möchtest, CompareText benutzen.
Ansonsten stimmt es, sofern tausche richtig funktionert.

Viele Grüße,
Hape

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.