Autor Beitrag
phombaa
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 14.06.03 16:28 
BEGIN Frage:

1. Ich möchte 2 Strings (s1 und s2) unter bestimmten
Bedingungen vergleichen.
2. Dazu suche ich eine Funktion (f1), welche True zurückgibt, wenn
a) s1 = s2
oder
b) s1 = s2 ist, wobei alle Satzzeichen {.,?;} ignoriert werden sollen.
Wäre z.B
s1 = 'abc, def?'
und
s2 = 'abc def';
würde f1(s1,s2) = True zurückgeben.
3. Wie kann man so was realisieren?

END Frage.

thx4antworten
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: Sa 14.06.03 16:36 
Hallo!

1. Man kann Stings direkt vergleichen!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if s1 = s2 then
begin
  tuwasbeigleich;
  tunochwasbeigleich;
end;
funzt prima. Ggf. noch mit Trim arbeiten, um Leerzeichen am Ende zu entfernen.

2. Strings ggf. in Zwischenwerte kopieren und alles Unerwünschte (Satzzeichen, mehrfache Leerzeichen etc.) mit StringReplace entfernen, dann vergleichen wie oben.

Alles weitere siehe F1!

Gruß

Dietmar Brüggendiek
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 14.06.03 17:55 
Brueggendiek hat folgendes geschrieben:
(Satzzeichen, mehrfache Leerzeichen etc.) mit StringReplace entfernen

Viel Spaß bei den vielen StringReplace aufrufen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
const
  Satzzeichen = ['.'','';'':''"''''''('')''?''!'];

function f(const S1, S2: string): Boolean;
var
  P1, P2: PChar;
begin
  Result := False;
  P1 := PChar(S1);
  P2 := PChar(S2);
  while (P1[0] <> #0and (P2[0] <> #0do
  begin
    while (P1[0in Satzzeichen) do Inc(P1);
    while (P2[0in Satzzeichen) do Inc(P2);
    if P1[0] <> P2[0then Exit;
    if P1[0] <> #0 then Inc(P1);
    if P2[0] <> #0 then Inc(P2);
  end;
  Result := True;
end;

_________________
Ist Zeit wirklich Geld?
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Sa 14.06.03 18:17 
Ansonsten sollte man hin und wieder das oft vergessene CompareStr und CompareText nutzen. Im Gegensatz zum direkten Vergleich bekommt man bei der Funktion auch größer/kleiner/gleich Ergebnisse. Der Unterschied zwischen CompareStr und CompareText ist, daß bei CompareText die Groß-/Kleinschreibung ignoriert wird.

Somit ist

if UpperCase(S1) = UpperCase(S2) then ...

vergleichbar mit

if CompareText(S1, S2) = 0 then ...

Alternativ gibt es noch AnsiCompareStr und AnsiCompareText,

_________________
Popov
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 14.06.03 18:25 
Nur dass dabei auch die Satzzeichen mitverglichen werden.

_________________
Ist Zeit wirklich Geld?
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Sa 14.06.03 18:31 
Ja, ich hab mir dein Beispiel nicht genau angeguckt. Ich dachte, daß deine Funktion nur die Zeichen entfernt.

_________________
Popov