Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [Erledigt]Totales Brett vorm Kopf: Problem mit 'end' (https://www.delphipraxis.net/63017-%5Berledigt%5Dtotales-brett-vorm-kopf-problem-mit-end.html)

inherited 12. Feb 2006 18:52


[Erledigt]Totales Brett vorm Kopf: Problem mit 'end'
 
Hi
Entweder habe ich ein KOMPLETTES Brett vorm Kopf gerade, oder sonste was. Er sagt es fehle ein 'end', aber wo?
Bitte Schnelle Hilfe!

Delphi-Quellcode:
    if (Command[1]+Command[2]+Command[3]+Command[4]+Command[5]) = 'LOGIN' then
    begin
      OK:=true;
      for i := 0 to ListBox1.Count-1 do if Uppercase(ListBox1.Items[i])=Copy(Command, 6, Length(Command)) then OK:=false;

      if ok then
      begin
        if (Copy(Command, 6, Length(Command)) = 'HAMSTER') or (Copy(Command, 6, Length(Command)) = 'IGEL') then
        begin
          ListBox1.Items.Add(Copy(Command, 6, Length(Command)));
          AThread.Connection.WriteLn('VER:0.1');
          lbProcesses.Items.Insert(0, 'Sending Command: loginok');
        end;
      end;
    end
    else
    begin
      AThread.Connection.WriteLn('loginnotok');
    end;

sakura 12. Feb 2006 18:55

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Es fehlt nicht in diesem Code-Stück, aber wohl woanders ;) Wahrscheinlich davor.

...:cat:...

inherited 12. Feb 2006 18:57

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Erstmal danke für die mühe, hier ist die komplette procedure, ääääh Pro>z<edur
Delphi-Quellcode:
procedure TfrmMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
    Command, Answer : String; i, j : Integer; OK: Boolean;
begin
  if Edit1.Text<>'' then
  begin
    AThread.Connection.WriteLn(Edit1.Text);
    Exit;
  end;
Answer:='';
Command := AThread.Connection.ReadLn;
lbProcesses.Items.Insert(0, 'Getting Command: '+Command);

Command := uppercase(Command);


if Command = 'TIME' then begin
    AThread.Connection.WriteLn(FormatDateTime('hh:nn:ss',now));
    lbProcesses.Items.Insert(0, 'Sending Command: '+FormatDateTime('hh:nn:ss',now)); end
else if Command = 'DATE' then begin
    AThread.Connection.WriteLn(FormatDateTime('dd/mmm/yyyy',date));
    lbProcesses.Items.Insert(0, 'Sending Command: '+FormatDateTime('dd/mmm/yyyy',date)); end
else if Command = 'TICKCOUNT' then begin
    j:=GetTickCount;
    AThread.Connection.WriteLn(IntToStr(j));
    lbProcesses.Items.Insert(0, 'Sending Command: '+IntToStr(GetTickCount)); end
else if Command = 'QUIT' then
    begin
    AThread.Connection.WriteLn('Cya!');
    lbProcesses.Items.Insert(0, 'Sending Command: Cya!');
    AThread.Connection.Disconnect;
    end

else if Command = 'GETLIST' then
    begin
    for i := 0 to ListBox1.Count-1 do Answer:=Answer+('; '+ListBox1.Items[i]);
    AThread.Connection.WriteLn(Answer);
    lbProcesses.Items.Insert(0, 'Sending Command: '+Answer)
    end

else if Command = 'SHUTDOWN' then
    begin
    AThread.Connection.WriteLn('Shutdown Server');
    lbProcesses.Items.Insert(0, 'Shutdown Server');
    AThread.Connection.Disconnect;
    btnExit.Click;
    end

else if Command = 'RESTART' then
    begin
    AThread.Connection.WriteLn('Restarting Server in 3 seconds...');
    lbProcesses.Items.Insert(0, 'Restarting Server in 3 seconds...');
    Timer1.Enabled:=true;

    end

else if (Command[1]+Command[2]+Command[3]+Command[4]+Command[5]) = 'LOGIN' then
    begin
      OK:=true;
      for i := 0 to ListBox1.Count-1 do if Uppercase(ListBox1.Items[i])=Copy(Command, 6, Length(Command)) then OK:=false;

      if ok then
      begin
        if (Copy(Command, 6, Length(Command)) = 'HAMSTER') or (Copy(Command, 6, Length(Command)) = 'IGEL') then
        begin
          ListBox1.Items.Add(Copy(Command, 6, Length(Command)));
          AThread.Connection.WriteLn('VER:0.1');
          lbProcesses.Items.Insert(0, 'Sending Command: loginok');
        end;
      end;
    end
    else
      begin
      AThread.Connection.WriteLn('loginnotok');
      end

    else if Command[1]+Command[2]+Command[3]+Command[4]+Command[5]+Command[6] = 'LOGOUT' then
    begin
      for i := 0 to ListBox1.Count-1 do
      begin
        if Uppercase(ListBox1.Items[i])=Copy(Command, 7, Length(Command)) then
        begin
          ListBox1.Items.Delete(i);
          lbProcesses.Items.Insert(0, ('Logged out '+Copy(Command, 7, Length(Command))));
        end;
      end;
      AThread.Connection.WriteLn('logoutok');
    end

else
begin
AThread.Connection.WriteLn('Ungültiger Befehl!');
lbProcesses.Items.Insert(0, 'Sending Command: Ungültiger Befehl!');
end;

end;

mindforce 12. Feb 2006 18:58

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Ne Brett vorm Kopf hast du nicht.


ACHTUNG: Nimm die end´s weg die vor dem Quellcode ende kommt!
MERKEN: Ein end kommt ans end(e)!!!!!!!!!!!!!!!



Es gibt nämlich 3 Arten von end

- end

- end;

- end.

Ich hatte auch Probleme mit diesem end.

Probier mal end; und end.

Dann dürfte es klappen. Wie gesagt: Ich hatte auch dauernd dieses Problem

Gruss,

Mindforce

inherited 12. Feb 2006 19:01

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Ds ist auch nicht der komplette Quellcode, sondern nur eine Procedur daraus. Das ende des Programms ist das nicht

sakura 12. Feb 2006 19:03

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
@MindForce: Was hilft es Ends wegzunehmen, wenn welche fehlen?

@inherited: auf den ersten Blick schaut der Code auch okay aus. Die Anzahl der Begin und der End ist identisch, wie es innerhalb einer Prozedur sein sollte. Allerdings ist die Formattierung (sorry) imo grauenhaft, so dass ich es nicht nachvollziehen kann, ob die Matches zwischen den begin-end Parts stimmen.

...:cat:...

inherited 12. Feb 2006 19:07

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
^^
ja ich weiss, aber das sollte den compiler ja nicht au der fassung bringen.
So langsam fange ih an, an meinem Verstand zu zweifeln.
HIIILLLLFFEEEEEEEEE. Kann mir denn keiner Helfen?

inherited 12. Feb 2006 19:13

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
omg chon der 3.^^
Wenn ich den teil mit dem LOGIN auskommentiere dann GEHTS

mindforce 12. Feb 2006 19:14

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Kannst du auch Sätze schreiben, die man auch verstehen kann?

Sry :roll:

Martin.Ghosts 12. Feb 2006 19:16

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Mh, also ich hab auch mal nachgezählt und finde genau so viele ends wie begins.
Ich bin zwar noch nicht so lange dabei, aber vielleicht hilft es ja was wenn man ein bisschen Übersicht in den Quelltext reinbringt. Also ich musste mir doch einige Stellen bisschen länger anschauen um dahinterzusteigen.

Die Muhkuh 12. Feb 2006 19:16

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Hi,

formatier deinen Code mal gescheit, dann findet sich der Fehler von alleine ;-)

sakura 12. Feb 2006 19:26

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Der Code-Abschnitt scheint mir sauber. Schaue Dir mal die vorhergehende Methode an ;)

...:cat:...

GuenterS 12. Feb 2006 19:29

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
DelForEx ist ein guter Formatierer. Per Tastendruck zum lesbaren Code. Und ja hilft wirklich oft.

sakura 12. Feb 2006 19:37

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
@all: es geht hier nicht um Code-Formattierer, sondern um einen fehlerhaften Code!

Back to topic, now!

...:cat:...

Martin.Ghosts 12. Feb 2006 19:41

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Ist klar. Aber ich finde den Quelltext an einigen Stellen etwas unübersichtlich. Ok Ansichtssache, aber vielleicht findet man so schneller das fehlende End.

engine 12. Feb 2006 20:47

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Hallo inherited,

Dir fehlt kein end, aber ein if....

Delphi-Quellcode:
   
    end
    else
      begin
        AThread.Connection.WriteLn('loginnotok');
      end
    else if Command[1]+Command[2]+Command[3]+Command[4]+Command[5]+Command[6] = 'LOGOUT' then
mfG engine

omata 12. Feb 2006 20:48

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Moin,

wenn man sich mal die Mühe macht und diesen komischen Code sauber einrückt, kann man nach etwas nachdenken sogar ein bischen was davon verstehen und dann sieht man, das dort wo der Compiler den Fehler meldet der if-then-else-if-then-Teil beendet ist. Dann einfach weiter machen mit einem else-if-then-Teil geht nunmal nicht.
Also Fazit -> Der Compiler macht alles genau richtig und ist einfach nur genial.

MfG
Thorsten

inherited 13. Feb 2006 14:08

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Viiieeelen Dank^^ tja das kommt davon, wenn man um 7 Uhr aufsteht und bis 23 uhr an sonem Programm sizt. Bei sowas hilft nur Koffein Intravenös^^

ichbins 13. Feb 2006 14:16

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Zitat:

Wenn ich den teil mit dem LOGIN auskommentiere dann GEHTS
dann hast du in der kommentierten Zeile irgendwo auf Zeichen 10000 ein begin stehen...

inherited 13. Feb 2006 14:27

Re: Totales Brett vorm Kopf: Problem mit 'end'
 
Das Thema ist erledigt, das Problem gelöst. Aber trotzdem danke, ichbins

TBx 13. Feb 2006 16:01

Re: [Erledigt]Totales Brett vorm Kopf: Problem mit 'end'
 
Hallo inherited!

Ich denke, die Ergänzung es IF von engine löst Dein Problem noch nicht vollständig.

Wenn ich Deinen Code richtig interpretiere, dann soll Dein TCP_Server auf den Befehl LOGIN hin überprüfen, ob der anzumeldende User (Rest des Loginstrings) sich anmelden darf, im Erfolgsfall soll 'VER:0.1' zurückgegeben werden, andernfalls 'loginnotok'.
Um dies zu realisieren, muß Dein ursprünglicher Code wie folgt geändert werden:


[...]


Delphi-Quellcode:
else if (Command[1]+Command[2]+Command[3]+Command[4]+Command[5]) = 'LOGIN' then
    begin
      OK:=true;
      for i := 0 to ListBox1.Count-1 do if Uppercase(ListBox1.Items[i])=Copy(Command, 6, Length(Command)) then OK:=false;

      if ok then
      begin
        if (Copy(Command, 6, Length(Command)) = 'HAMSTER') or (Copy(Command, 6, Length(Command)) = 'IGEL') then
        begin
          ListBox1.Items.Add(Copy(Command, 6, Length(Command)));
          AThread.Connection.WriteLn('VER:0.1');
          lbProcesses.Items.Insert(0, 'Sending Command: loginok');
        end;
//      end;   [b](1) hier stand die Zeile ursprünglich[/b]
    end
    else
      begin
      AThread.Connection.WriteLn('loginnotok');
    end; // [b](2) und hier muß Zeile (1) hin[/b]
      end
    else if Command[1]+Command[2]+Command[3]+Command[4]+Command[5]+Command[6] = 'LOGOUT' then
[...]

Und dann noch eine Anmerkung zu Deiner Schleife, in der Du den User gegen die Einträge einer Listbox validierst:

[...]

Delphi-Quellcode:
      for i := 0 to ListBox1.Count-1 do if Uppercase(ListBox1.Items[i])=Copy(Command, 6, Length(Command)) then OK:=false;
[...]

Da hier alle Listboxeinträge durchlaufen werden, bekommst Du in OK nur die Info, ob der letzte Eintrag Deiner Listbux dem User entspricht.
Ich vermute, OK soll genau dann FALSE werden, wenn ein beliebiger Eintrag in der Listbox dem USER entspricht.
Das kannst Du folgendermaßen realisieren:

>>>>>>>>>>>>>>>>>>>>>>

Delphi-Quellcode:
      for i := 0 to ListBox1.Count-1 do
        begin
          if Uppercase(ListBox1.Items[i]) = Copy(Command, 6, Length(Command)) then
          begin
            OK := false;
            break;
          end;
        end;
<<<<<<<<<<<<<<<<<<<<<<


hoffe, Dir hilft das noch ein bißchen weiter

MfG

onlinekater

[edit=alcaeus]Delphi-Tags eingefuegt. Mfg, alcaeus[/edit]

FBrust 13. Feb 2006 16:12

Re: [Erledigt]Totales Brett vorm Kopf: Problem mit 'end'
 
Hi,

in den GExperts enthalten sind die "Editor Experts". Diese beinhalten die Funktion "Find Matching Delimiter", damit kannst Du ein "Begin" markieren und der Editor zeigt Dir das dazu passende "end" (oder "end." oder "end;"). Hat mir auch schon geholfen, wenn ich vor lauter Bäumen den Wald nicht mehr gesehen habe.... :shock:

Gruß

Frank

inherited 13. Feb 2006 17:14

Re: [Erledigt]Totales Brett vorm Kopf: Problem mit 'end'
 
danke.
JEtzt noch mal für ALLE:
Das Problem ist Gelöst
Ein end; war vor den ersten else-eintrag gerutscht, hätte aber DAHINTER stehen müssen.
Es ist GELÖST

Aber wenn wir schon dabei sind, wie ihr sicher seht ist das eine tcp/ip server/bzw Client anwendung
Gebt mir doch mal Denkanstöße was ich damit jetzt noch so machen könnte^^

mindforce 13. Feb 2006 17:40

Re: [Erledigt]Totales Brett vorm Kopf: Problem mit 'end'
 
Aber.... bla. Achso gelöst! :angel2:

inherited 13. Feb 2006 20:17

Re: [Erledigt]Totales Brett vorm Kopf: Problem mit 'end'
 
mindforce... dein alter in allen ehren(bin selbst erst 14) aber musst du eigentlich immer das letzte wort haben? :lol: :lol:

grrrr ICH will das letzte wort haben^^
is MEIN thread


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz