![]() |
Re: Befehle erstellen
Lass doch wieder mit POS das nächste Leerzeichen suchen!
Delphi-Quellcode:
Das haut hin, habs getestet ... bzw, funktioniert natürlich nur, wenn die User-Namen keine Leerzeichen enthalten!
procedure TForm1.Button1Click(Sender: TObject);
var befehl, user, s, reason: string; begin S :='/kick k4ni weil er zu viel fragen stellt =)'; if s[1] = '/' then // Prüfen, ob Befehl! begin befehl := Copy(s, 2, Pos(' ', s) - 2); //DA IST JETZ NE 2 STATT NER 1 if befehl = 'kick' then begin //edit: der anweisungsblock hier user := Copy(s, Pos(' ', s) + 1, Pos(' ', s) - 2); reason := Copy(s, Pos(user, s) + 1 + Length(user), Length(s)); end; end; ShowMessage(user+' wurde gekickt, reason: '+reason); end; |
Re: Befehle erstellen
Ich dachte das POS immer das erste leerzeichen nimmt :(
Vielen dank :) |
Re: Befehle erstellen
Ohh das ist auch so.
Der name darf nicht länger als 4 zeichen sein. (immer solange wie der befehl, also wenn der befehl hahaha heist darf der name auch 6 zeichen lang sein). Also sucht er hier zweimal nach dem gleichen leerzeichen:
Delphi-Quellcode:
Ich hab jetzt schon ein bisschen rumversucht wie er nach dem 2. suchen könnte, aber ich krieg es nicht raus. :x
user := Copy(s, Pos(' ', s) + 1, Pos(' ', s) - 2);
|
Re: Befehle erstellen
Schau Dir mal PosEx an.
|
Re: Befehle erstellen
Zitat:
bisheriger Code:
Delphi-Quellcode:
jetziger code:
procedure TForm1.Button1Click(Sender: TObject);
var befehl, user, s, reason: string; begin S :='/kick k4ni weil er zu viel fragen stellt =)'; if s[1] = '/' then // Prüfen, ob Befehl! begin befehl := Copy(s, 2, Pos(' ', s) - 2); //Copy will als dritten Parameter keine zweite STELLE, sondern die ANZAHL der Zeichen! Also ist es ja logisch, dass man eine '2' braucht... if befehl = 'kick' then begin user := Copy(s, Pos(' ', s) + 1, Pos(' ', s) - 2); // hier dasselbe nur nicht mit '2' sondern mit was anderem, weil ja der 'kick' befehl schon mit drin ist reason := Copy(s, Pos(user, s) + 1 + Length(user), Length(s)); end; end; ShowMessage(user+' wurde gekickt, reason: '+reason); end;
Delphi-Quellcode:
uses StrUtils;
... procedure TForm1.Button1Click(Sender: TObject); var befehl, user, s, reason: string; begin S :=edit1.text; if s[1] = '/' then begin befehl := Copy(s, 2, Pos(' ', s) - 2); if befehl = 'kick' then begin user := Copy(s, 7, PosEx(' ', s, 7) - 7); //bei PosEx (unit-einbinden nicht vergessen) kann man nun den startwert zum suchen mit eingeben: '7' weil dort das erste zeichen nach dem leerzeichen hinter kick kommt, damit kann man denke ich hier arbeiten, weil ja schon feststeht, dass 'kick' der befehl ist, ansonsten müsste man dynamisch rangehen =) reason := Copy(s, PosEx(' ', s, 7) + 1, Length(s)); end; end; ShowMessage(user+'#'+reason); end; |
Re: Befehle erstellen
ja entweder du zerlegst erstmal den String anhand von Trennzeichen (z.B. " "), wobei sich dafür auch
![]() oder man prüft einzeln, wobei letzteres gut ist, wenn man (ohne dynamische Arrays) auf verschiedene Befehlsformate reagieren möchte. Zitat:
Delphi-Quellcode:
S := LowerCase(Msg.Text);
if copy(S, 1, 6) = '/kick ' then begin name := copy(S, 7, ...); ... end else if S = '/exit' then begin ... end else if copy(S, 1, 13) = '/abrakadabra ' then begin param := copy(S, 14, ...); ... end;
Delphi-Quellcode:
A := Explode(Msg.Text, ' ');
if Length(A) < 1 then exit; A[0] := LowerCase(A[0]); if (A[0] = '/kick') and (Length(A) > 1) then begin name := A[1]; ... end else if A[0] = '/exit' then begin ... end else if (A[0] = '/abrakadabra') and (Length(A) > 1) then begin param := A[1]; ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz