Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Funktion abbrechen (https://www.delphipraxis.net/119001-funktion-abbrechen.html)

LuCSteR 19. Aug 2008 11:36


Funktion abbrechen
 
Mal wieder eine grundlegende Frage.

Eine Schleife kann man mit
Delphi-Quellcode:
break;
abwürgen. Gibt es derartiges auch für eine Funktion/Prozedur? Allerdings stellt sich mir dann die Frage, was die Funktion/Prozedur dann an Werten zurückliefert, oder auch nicht.

Mir fällt gerade ein das mein Info-Dozent was von schlechtem Programmierstil mit "got-to"-Anweisungen erzählt hat. Wäre das vielleicht die lösung meines Problems? Habe damit nie gearbeitet, nie arbeiten dürfen :)

Grüße

mkinzler 19. Aug 2008 11:37

Re: Funktion abbrechen
 
Delphi-Quellcode:
Exit;
Aber meisstens kann man das umgehen

Deep-Sea 19. Aug 2008 11:38

Re: Funktion abbrechen
 
Zitat:

Zitat von LuCSteR
Allerdings stellt sich mir dann die Frage, was die Funktion/Prozedur dann an Werten zurückliefert, oder auch nicht.

Sie liefert den Wert zurück, den du Result vor Exit zugewiesen hast. Wenn du Result nie zuweist, wird Delphi dich darauf schon hinweisen ...

LuCSteR 19. Aug 2008 11:44

Re: Funktion abbrechen
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
Exit;
Aber meisstens kann man das umgehen

Wie meinst du das?

Ich hab eine Funktion die 8 IF-THEN-ELSE-Verschachtelungen beinhaltet. Wäre also schon sinnvoll zwischendrin abzubrechen, weil ja sonst alle kommenden Abfragen auch abgearbeitet werden. Das ist dann allerdings nicht mehr notwendig.

Danke für die Hilfe :)

mkinzler 19. Aug 2008 11:46

Re: Funktion abbrechen
 
Oft kann man die Bedingungen so festlegen, dass man auf Exit o.ä. verzichten kann. Aber natürlich nicht immer.

LuCSteR 19. Aug 2008 11:49

Re: Funktion abbrechen
 
Hast du ein kurzes Beispiel dafür parat?

Habe da an eine Umformung zu einer While-Do-Schleife gedacht? Meinst du das?

mkinzler 19. Aug 2008 11:51

Re: Funktion abbrechen
 
Z.B. Wie sehen den die Schleifen aus?

LuCSteR 19. Aug 2008 11:56

Re: Funktion abbrechen
 
Naja es handelt sich um eine Strinüberprüfung, ob er einer IP-Formatierung gerecht wird :)

Delphi-Quellcode:
//IP formatierung überprüfen
function IP_Prove(var IP:string):boolean;
var
  DotPos1, DotPos2, DotPos3, StrL, SubStrL:integer;
  SubStr:string;

begin
  IP:=StringReplace(IP, ' ', '', [rfReplaceAll]);
 
  if IP='' then Result:=false
  else
    begin
      StrL:=Length(IP);
      //ShowMessage(inttostr(StrL)); //zum testen
      DotPos1:=Pos('.', IP); //Ermittlung 1. Punkt
      //ShowMessage(inttostr(DotPos1)); //zum testen
      SubStr:=Copy(IP, 1, DotPos1-1); //Ermittlung 1. Oktett
      //ShowMessage(SubStr); //zum testen
      SubStrL:=Length(SubStr);
      //ShowMessage(SubStrL); //zum testen
      if ((SubStrL<1) or (SubStrL>3))then
        begin
          Result:=false;
          MessageDlg('Fehler', '1. Oktett muss aus mind. 1 bzw. darf aus max. 3 Zeichen bestehen!', mtError, [mbOk], 0);
          Exit;
        end
      else
        begin
          if ((strtoint(SubStr)<0) or (strtoint(SubStr)>255)) then
            begin
              Result:=false;
              MessageDlg('Fehler', '1. Oktett darf nur einen numerischen Wert von 0 bis 255 annehmen!', mtError, [mbOk], 0);
              Exit;
            end
          else
            begin
              DotPos2:=PosEx('.', IP, DotPos1+1); //Ermittlung 2. Punkt
              //ShowMessage(inttostr(DotPos2)); //zum testen
              SubStr:=Copy(IP, DotPos1+1, DotPos2-DotPos1-1); //Ermittlung 2. Oktett
              //ShowMessage(SubStr); //zum testen
              SubStrL:=Length(SubStr);
              //ShowMessage(SubStrL); //zum testen
              if ((SubStrL<1) or (SubStrL>3))then
                begin
                  Result:=false;
                  MessageDlg('Fehler', '2. Oktett muss aus mind. 1 bzw. darf aus max. 3 Zeichen bestehen!', mtError, [mbOk], 0);
                  Exit;
                end
              else
                begin
                  if ((strtoint(SubStr)<0) or (strtoint(SubStr)>255)) then
                    begin
                      Result:=false;
                      MessageDlg('Fehler', '2. Oktett darf nur einen numerischen Wert von 0 bis 255 annehmen!', mtError, [mbOk], 0);
                      Exit;
                    end
                  else
                    begin
                      //ShowMessage(SubStr); //zum testen
                      DotPos3:=PosEx('.', IP, DotPos2+1); //Ermittlung 3. Punkt
                      //ShowMessage(inttostr(DotPos3)); //zum testen
                      SubStr:=Copy(IP, DotPos2+1, DotPos3-DotPos2-1); //Ermittlung 3. Oktett
                      //ShowMessage(SubStr); //zum testen
                      SubStrL:=Length(SubStr);
                      //ShowMessage(SubStrL); //zum testen
                      if ((SubStrL<1) or (SubStrL>3))then
                        begin
                          Result:=false;
                          MessageDlg('Fehler', '3. Oktett muss aus mind. 1 bzw. darf aus max. 3 Zeichen bestehen!', mtError, [mbOk], 0);
                          Exit;
                        end
                      else
                        begin
                          if ((strtoint(SubStr)<0) or (strtoint(SubStr)>255)) then
                            begin
                              Result:=false;
                              MessageDlg('Fehler', '3. Oktett darf nur einen numerischen Wert von 0 bis 255 annehmen!', mtError, [mbOk], 0);
                              Exit;
                            end
                          else
                            begin
                              //ShowMessage(SubStr); //zum testen
                              SubStr:=Copy(IP, DotPos3+1, StrL); //Ermittlung 4. Oktett
                              //ShowMessage(SubStr); //zum testen
                              SubStrL:=Length(SubStr);
                              //ShowMessage(SubStrL); //zum testen
                              if ((SubStrL<1) or (SubStrL>3))then
                                begin
                                  Result:=false;
                                  MessageDlg('Fehler', '4. Oktett muss aus mind. 1 bzw. darf aus max. 3 Zeichen bestehen!', mtError, [mbOk], 0);
                                  Exit;
                                end
                              else
                                begin
                                  if ((strtoint(SubStr)<0) or (strtoint(SubStr)>255)) then
                                    begin
                                      Result:=false;
                                      MessageDlg('Fehler', '4. Oktett darf nur einen numerischen Wert von 0 bis 255 annehmen!', mtError, [mbOk], 0);
                                      Exit;
                                    end;
                                end;
                            end;
                        end;
                    end;
                end;
            end;
        end;
    end;
end;
Ist allerdings noch nicht ganz fertig. Würde gern noch den String darauf prüfen wollen, ob er andere Zeichen als Zahlen von 0..9 oder "." enthält. Ansonsten muss noch eine Überprüfung rein, ob wirklich nur 3 Punkte im String vorhanden sind. Das ist nicht allzu schwierig. Ein Anstaz für mein erstes Problem habe ich allerdings noch nicht gefunden. Bin halt grad am Code schreiben :)

Matze 19. Aug 2008 12:03

Re: Funktion abbrechen
 
Hallo,

nur so als Hinweis: Was spricht gegen diesen Source: ...einen String auf eine gültige IP-Adresse überprüfen (II)?? ;)

Grüße

LuCSteR 19. Aug 2008 12:10

Re: Funktion abbrechen
 
Rein garnichts :) Naja wenn man in den Foren nicht angemeldet ist bzw. sie nicht kennt, dann findet man den Code auch nicht so einfach oder? :)

Naja meiner funktioniert auch! hehe


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 Uhr.
Seite 1 von 2  1 2      

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