Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Befehle erstellen (https://www.delphipraxis.net/105648-befehle-erstellen.html)

TonyR 27. Dez 2007 00:20

Re: Befehle erstellen
 
Lass doch wieder mit POS das nächste Leerzeichen suchen!

Delphi-Quellcode:
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;
Das haut hin, habs getestet ... bzw, funktioniert natürlich nur, wenn die User-Namen keine Leerzeichen enthalten!

k4ni 27. Dez 2007 00:34

Re: Befehle erstellen
 
Ich dachte das POS immer das erste leerzeichen nimmt :(

Vielen dank :)

k4ni 27. Dez 2007 13:06

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:
      user := Copy(s, Pos(' ', s) + 1, Pos(' ', s) - 2);
Ich hab jetzt schon ein bisschen rumversucht wie er nach dem 2. suchen könnte, aber ich krieg es nicht raus. :x

DeddyH 27. Dez 2007 13:17

Re: Befehle erstellen
 
Schau Dir mal PosEx an.

TonyR 27. Dez 2007 20:13

Re: Befehle erstellen
 
Zitat:

Zitat von DeddyH
Schau Dir mal PosEx an.

genau ... also pass auf (ich hoffe, dass du dir auch fein selber Gedanken machst, weil du weißt ja, wie das hier läuft)

bisheriger Code:
Delphi-Quellcode:
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;
jetziger code:
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;

himitsu 27. Dez 2007 22:02

Re: Befehle erstellen
 
ja entweder du zerlegst erstmal den String anhand von Trennzeichen (z.B. " "), wobei sich dafür auch Hier im Forum suchenExplode und Co. ganz gut machen,

oder man prüft einzeln, wobei letzteres gut ist, wenn man (ohne dynamische Arrays) auf verschiedene Befehlsformate reagieren möchte.

Zitat:

Nicht zu empfehlen... was ist, wenn der Befehl einmal lauten sollte "/abrakadabra" dann ist nichts mehr mit Copy(Text, 1, 6).
wie wäre es, wenn man dann die Zahlen anpaßt? :zwinker:

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.
Seite 2 von 2     12   

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