Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Prüfen ob Teilstring enthalten ist?


sPeeD2k5 - Mi 01.10.08 14:19
Titel: Prüfen ob Teilstring enthalten ist?
Also mein Problem ist folgendes: Ich schreibe zur Zeit einen IRC-Bot der auf bestimmte Commands reagieren soll!
Bsp:
!kill test.exe

dann soll er halt die test.exe beenden.. Mein Problem ist, wenn ich das Command mit der Test.exe am benutze, reagiert die If-Abfrage nicht.

Delphi-Quelltext
1:
if Content <= '!kill' then                    

kann man das irgndwie machen, dass er nur checkt ob der String enthalten ist?

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt


Delete - Mi 01.10.08 14:20

Spontan fallen mir Pos() und AnsiContainsText() ein.


sPeeD2k5 - Mi 01.10.08 14:25

perfekt, funktioniert! danke dir :)


Bronstein - Sa 04.10.08 14:35

Hier eine Funktion die ich nutze:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function IstInString(quelle: string; suche: string):boolean;
begin
  if pos(suche,quelle) > 0 then
    result := true
  else
    result:=false;
end;


Yogu - Sa 04.10.08 14:45

user profile iconBronstein hat folgendes geschrieben Zum zitierten Posting springen:
Hier eine Funktion die ich nutze:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function IstInString(quelle: string; suche: string):boolean;
begin
  if pos(suche,quelle) > 0 then
    result := true
  else
    result:=false;
end;

Das ist ein wenig "doppelt gemoppelt", so wär's performanter und einfacher:


Delphi-Quelltext
1:
2:
3:
4:
function IstInString(const Quelle, Suche: String): Boolean;
begin
  Result := Pos(Suche, Quelle) > 0;
end;

Aber eigentlich macht das nicht viel Sinn, sind nur ein Jump-Befehl und ein paar Hin- und Herschubskommanodos mehr.


Hidden - Sa 04.10.08 14:50

Hi,

Das läuft auf das selbe Verständnisproblem heraus wie die direkten Vergleiche auf true.

Außerdem muss der String so zuerst kopiert werden. Strings können im Speicher sehr groß werden. Bei Objekten wird standardmäßig(implizit) ein Pointer übergeben. Bei Datentypen der Größe eines Integers lohnt sich das erstellen eines Pointers nicht(Pointer ist gleich groß wie Integer).

Bei Strings kann es aber im Extremfall minutenlanges kopieren ersparen, wenn man sie als "const" deklariert, da dann keine Kopie erstellt werden muss.


Kompakter wäre sicherlich:
1:
2:
3:
4:
function Contains(const S, aKeyword: String): Boolean;
begin
  result := Pos(aKeyword, S) > 0;
end;


E: Mist, zu spät, während ich noch 'n bissel 'was hinterhergeschrieben habe..

@Yugo: Naja. Für absolute Laien wäre es sicherlich verständlicher ;) Insofern stellt sich hier die Frage, an welche Zielgruppe der Code gerichtet ist.

mfG,