[Ju...] Posted July 20, 2021 Share Posted July 20, 2021 Hallo, jetzt habe ich noch ein weiteres Problem, habe schon etliche Versuche hinter mir, aber bekomme es nicht hin. Ich vermute es ist ganz einfach. Habe folgenden Code programmiert. Funktioniert soweit. Jetzt hätte ich aber noch gerne eine zusätzliche Abbruchbedingung mit eingebaut. Ich hatte mir vorgestellt ein zweites "repeat... until" mit einzubauen und hier hochzuzählen bis auf 3 Durchläufe. Aus irgendwelchen Gründen funktioniert es aber nicht. //Teilenummer muss dreistellig eingeben werde repeat Teilenummer=getRecordHead("partnbinc") //Abfrage Teilenummer aus Protokollkopf IstAnzahlDerZeichen = len(Teilenummer) //Abfrage Länge der Teilenummer SollAnzahlDerZeichen = 3 //Soll Länge der Teilenummer if IstAnzahlDerZeichen >= SollAnzahlDerZeichen then message("Richtig") else message("Falsch") setRecordHead("partnbinc",inquireText("Teilenummer muss dreistellig eingegeben werden, bitte richtig eingeben!")) //Aufforderung zum schreiben der Teilenummer falls diese nicht dreistellig eingegeben wurde endif until len(Teilenummer) >= SollAnzahlDerZeichen Hatte mir das so in dieser Art vorgestellt: //Teilenummer muss dreistellig eingeben werde repeat Teilenummer=getRecordHead("partnbinc") //Abfrage Teilenummer aus Protokollkopf IstAnzahlDerZeichen = len(Teilenummer) //Abfrage Länge der Teilenummer SollAnzahlDerZeichen = 3 //Soll Länge der Teilenummer if IstAnzahlDerZeichen >= SollAnzahlDerZeichen then message("Richtig") i=0 else repeat i=i+1 message("Falsch") setRecordHead("partnbinc",inquireText("Teilenummer muss dreistellig eingegeben werden, bitte richtig eingeben!")) //Aufforderung zum schreiben der Teilenummer falls diese nicht dreistellig eingegeben wurde until i==3 endif until len(Teilenummer) >= SollAnzahlDerZeichen Er zählt zwar hoch aber Beendet das ganze dann nicht. Ich vermute dass ein Logikfehler meinerseits dahinter steckt an welcher Stelle das ganze eingefügt werden muss. Wäre super wenn ich hier einen Tip erhalten könnte. Link to comment Share on other sites More sharing options...
[No...] Posted July 20, 2021 Share Posted July 20, 2021 Mich verwirrt bereits das ">=" in der IF-Abfrage. Müsste das nicht "<=" heißen? Die eingegebene Nummer soll ja (maximal?) dreistellig sein, wenn ich den Code richtig verstehe. Das i=0 muss außerhalb der IF-Bedingung stehen (davor), sonst wird es nur ausgeführt, wenn der Teil vor dem else zutrifft. Das tut er aber ja gerade dann nicht, wenn der Zähler gebraucht wird (nämlich nach dem else). Also wird i eigentlich immer nur dann zu Null gesetzt, wenn es gar nicht benutzt wird (da dann else nicht zutrifft). --> i=0 unmittelbar vor die IF-Anweisung verschieben P.S.: Nur aus Interesse: Warum willst du dem Benutzer die "Falsch"-Meldung + Eingabeaufforderung per Zähler dreimal hintereinander um die Ohren hauen? Kriegt er das beim ersten Mal nicht hin? 🤣 (Scherz!) Link to comment Share on other sites More sharing options...
[Fl...] Posted July 21, 2021 Share Posted July 21, 2021 Hallo, meiner Meinung nach funktioniert die 2. Variante nicht, da der Parameter i erst in der if Bedingung mit 0 belegt wird, das heißt wenn die Teilenummer beim ersten Durchlauf nicht die richtige Länge hat dann ist i = 9999 + 1 und kann dann somit nicht mehr 3 werden! das i = 0 würde ich sogar vor dem ersten repeat einfügen ansonsten wird das dann ja immer wieder auf 0 zurückgesetzt. Du kannst das Ganze auch noch vereinfachen wenn Du nur eine repeat Schleife verwendest und zum Schluss beide Bedingungen mit der "or" Funktion abfragst. in etwa so: //Teilenummer muss dreistellig eingeben werde i=0 repeat Teilenummer=getRecordHead("partnbinc") //Abfrage Teilenummer aus Protokollkopf IstAnzahlDerZeichen = len(Teilenummer) //Abfrage Länge der Teilenummer SollAnzahlDerZeichen = 3 //Soll Länge der Teilenummer if IstAnzahlDerZeichen >= SollAnzahlDerZeichen then message("Richtig") else i=i+1 message("Falsch") setRecordHead("partnbinc",inquireText("Teilenummer muss dreistellig eingegeben werden, bitte richtig eingeben!")) //Aufforderung zum schreiben der Teilenummer falls diese nicht dreistellig eingegeben wurde endif until (len(Teilenummer) >= SollAnzahlDerZeichen) or (i == 3) PS: Eine kleine Info, das der von dir gepostete PCM Code in eine Endlosschleife führt, wäre nett gewesen. 🤣 MfG Florian Link to comment Share on other sites More sharing options...
[Ju...] Posted July 21, 2021 Author Share Posted July 21, 2021 Hallo zusammen, vielen dank vorab für die Unterstützung. Ich hatte schon vermutet dass es "nur" mit der Position zu tun haben kann, bin aber selbst auf dem Schlauch gestanden. Ich schreibe >= weil ich will dass die Nummer mindestens dreistellig ist. Falls doch mal ein Auftrag über 999 geht soll dass kein Hindernis sein. Man glaubt nicht was in der Fertigung alles möglich ist, bisher haben sie es auf einfache Anweisung die Teilenummer doch bitte dreistellig einzugeben nicht hinbekommen, deshalb will ich das jetzt gleich "Idiotensicher" machen. 🤣 Mit der "or" Funktion hatte ich es auch versucht aber führte immer zu einer Fehlermeldung. Vermutlich lag es an der fehlenden Klammer. Werde ich gleich testen, und sorry für die Endlosschleife. 🤣 Gibt es eigentlich eine andere Möglichkeit aus so einer Endlosschleife wieder rauszukommen außer den harten Weg? Link to comment Share on other sites More sharing options...
[No...] Posted July 22, 2021 Share Posted July 22, 2021 Was für eine Fehlermeldung war das denn? Ich muss nochmal auf meine Scherzfrage von oben zurückkommen: Die Variante von Florian ergibt für mich nicht nur wegen der anders plazierten Anweisung i=0 mehr Sinn, sondern auch, weil die Bedingung für die Wiederholung der "Falsch"-Meldung dort logischer ist. In deinem ersten (bzw. zweiten) Beispiel ganz oben würde nämlich diese Meldung ohne weitere Prüfung so oft wiederholt, bis der Zählerstand erreicht ist, und zwar auch dann, wenn die Nummer richtig eingegeben wurde. Ich glaube nicht, daß du das so beabsichtigt hast. Deswegen die Frage von mir 😉 Also falls nach wie vor ein Fehler kommt, poste einfach mal den Text. Das kann eigentlich nichts weltbewegendes sein. Link to comment Share on other sites More sharing options...
[Ju...] Posted July 22, 2021 Author Share Posted July 22, 2021 Danke, aber jetzt läuft alles wie gewünscht. Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in