AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion abbrechen

Ein Thema von LuCSteR · begonnen am 19. Aug 2008 · letzter Beitrag vom 19. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#1

Funktion abbrechen

  Alt 19. Aug 2008, 12:36
Mal wieder eine grundlegende Frage.

Eine Schleife kann man mit 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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Funktion abbrechen

  Alt 19. Aug 2008, 12:37
Exit; Aber meisstens kann man das umgehen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Funktion abbrechen

  Alt 19. Aug 2008, 12:38
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 ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#4

Re: Funktion abbrechen

  Alt 19. Aug 2008, 12:44
Zitat von mkinzler:
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Funktion abbrechen

  Alt 19. Aug 2008, 12:46
Oft kann man die Bedingungen so festlegen, dass man auf Exit o.ä. verzichten kann. Aber natürlich nicht immer.
Markus Kinzler
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#6

Re: Funktion abbrechen

  Alt 19. Aug 2008, 12:49
Hast du ein kurzes Beispiel dafür parat?

Habe da an eine Umformung zu einer While-Do-Schleife gedacht? Meinst du das?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Funktion abbrechen

  Alt 19. Aug 2008, 12:51
Z.B. Wie sehen den die Schleifen aus?
Markus Kinzler
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#8

Re: Funktion abbrechen

  Alt 19. Aug 2008, 12:56
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Funktion abbrechen

  Alt 19. Aug 2008, 13:03
Hallo,

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

Grüße
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#10

Re: Funktion abbrechen

  Alt 19. Aug 2008, 13:10
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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