• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Ausfahrt aus einer Schleife

  • Ersteller Ersteller Gio_S
  • Erstellt am Erstellt am

Gio_S

Guest
Bye to all,
Ich werde verrückt mit dem "while"
Ich erkläre die Bedingung, in meinem Fall eine Datei lesen, aber cmq das Problem ist generisch auf jeder Anleitung, die Sie in einer Zeit behandeln möchten.
die Bedingung für die Durchführung der Schleifenanweisung ist, dass zum Beispiel das Wort "finefile" nicht gelesen wird.
aber wenn in der Schleife "finefile" gelesen wird, springt die Ausführung gar nicht aus und versucht, die folgenden Anweisungen in der Schleife zu erfüllen, mit einer Menge Lesefehler über das Ende der Datei hinaus.
der Stop passiert nur mit dem nächsten Zyklus.
Ich habe aufgebaut, aber brutal, in dem Sinne, dass an der Spitze der Anweisungen der Schleife ich ihm sagen, sie auszuführen (mit einem zusätzlichen, wenn) nur, wenn das zuvor gelesene Wort nicht "finefile".
Ich muss zwei Blocks setzen.
In der Praxis wird die Schleife vor der Zeit zum letzten Mal durchgeführt. Oh, mein Gott, es ist nicht getan, aber nur weil ich sogar einen gepflanzt habe, um die Anweisungen, die im Zyklus übrig sind, zu blasen.
Ich glaube nicht, dass ich sehr klar war... in der Praxis werden die Zyklen laufen, um die Anweisungen abzuschließen, auch wenn sie den Zustand in der Zeit brechen.
Gibt es keinen eleganteren Weg, aus der Schleife zum Flug zu kommen, als selbst ein if zu platzieren, um diesen letzten Zyklus zu vermeiden, der bereits gestartet wurde?
Vielen Dank, wenn ich es geschafft habe zu erklären und jemand erleuchtet mich!
g.
 
Ich habe es immer mit...

(setq eof nil)
;
(weniger als Null)
(setq line (readline legg)); Textzeile lesen
(falls (null Zeile)(setq eof t) ; wenn Zeile = nil wir Datei beenden: eof = t
(progn, ... sonst)
.... Serie von Befehlen....
)
)
)
) ; Ende

... und er gab mir nie Ärger!
 
Danke für die Antwort! Aber Sie tun es genau mit einem Kriterium gleich meinem, testen mit einem if.
Das tue ich, anstatt deines Eofs:
(falls (/= v1 nil), d.h. dort, wo der Scheitel 1 nach einem Lesen geschätzt wird, da er auf einer vorhandenen Zeile gelesen wurde, auch weiterhin.
Ich wäre wirklich neugierig zu sehen, ob die Zeit keine Alternativen hat, weil diese Tatsache meinen Code abwägt.
nicht immer die Liste der Daten ist in seiner Vielfalt lesbar, so dass ein für anstatt zu verwenden... Manchmal ist seine Konsistenz unvorhergesehen.
Danke noch mal!
 
Bye to all,
Ich werde verrückt mit dem "while"
Ich erkläre die Bedingung, in meinem Fall eine Datei lesen, aber cmq das Problem ist generisch auf jeder Anleitung, die Sie in einer Zeit behandeln möchten.
die Bedingung für die Durchführung der Schleifenanweisung ist, dass zum Beispiel das Wort "finefile" nicht gelesen wird.
aber wenn in der Schleife "finefile" gelesen wird, springt die Ausführung gar nicht aus und versucht, die folgenden Anweisungen in der Schleife zu erfüllen, mit einer Menge Lesefehler über das Ende der Datei hinaus.
der Stop passiert nur mit dem nächsten Zyklus.
Ich habe aufgebaut, aber brutal, in dem Sinne, dass an der Spitze der Anweisungen der Schleife ich ihm sagen, sie auszuführen (mit einem zusätzlichen, wenn) nur, wenn das zuvor gelesene Wort nicht "finefile".
Ich muss zwei Blocks setzen.
In der Praxis wird die Schleife vor der Zeit zum letzten Mal durchgeführt. Oh, mein Gott, es ist nicht getan, aber nur weil ich sogar einen gepflanzt habe, um die Anweisungen, die im Zyklus übrig sind, zu blasen.
Ich glaube nicht, dass ich sehr klar war... in der Praxis werden die Zyklen laufen, um die Anweisungen abzuschließen, auch wenn sie den Zustand in der Zeit brechen.
Gibt es keinen eleganteren Weg, aus der Schleife zum Flug zu kommen, als selbst ein if zu platzieren, um diesen letzten Zyklus zu vermeiden, der bereits gestartet wurde?
Vielen Dank, wenn ich es geschafft habe zu erklären und jemand erleuchtet mich!
g.
Ich würde diese Lösung annehmen, bevor ich den "while"-Zyklus einschreibe, lese ich die erste Textzeile, die sie einer Variable(a) zuordnet, um sicherzustellen, dass sie nicht bereits das Ende der Datei ist (auch wenn sie eine Datei ohne Daten wäre).
Ich gehe dann zum "while" Lesen der zweiten Zeile, die sie einer Variablen(b) zuordnet, führe alle Prozedur innerhalb des "while", aber basierend auf der Variable(a), das ist die Zeile vor dem aktuellen.
vor der Rückkehr zum Kopf der "while" die dritte Zeilenüberprüfung auf die Variable(a) den Wert der Variable(b).
auf diese Weise, wenn die aktuelle Linie die letzte sein wird, in Wirklichkeit wird das vorletzte verarbeitet, und es kommt aus dem "while" ohne Fehler.
 
Ja, es scheint genial, in der Praxis sagen Sie, lesen Sie zuletzt, während das eine leere Linie ist, so bleibt es klar, dass es keinen neuen Zyklus zu verpflichten. Jetzt versuche ich, die Datendatei ist ziemlich komplex, in dem Sinne, dass jeder Zyklus mehrere Zeilen lesen muss, einige verwenden und andere verwerfen, bis es eine findet, die das Ende des Objekts signalisiert, aber leider kann ich es nicht mit etwas vergleichen, weil seine Zeichenfolge zwischen einer Datei und der anderen variieren kann. Also muss ich in der Praxis den Zyklus mit einem Lesen der ersten nicht vorhandenen Zeile beenden, und so merke ich, dass ich die Daten beendet habe. Ich verliere gerade etwas, aber es ist logisch, also sollte ich in der Lage sein. Glücklicherweise werden die Daten in eine Reihe von konstanten Zeilen gruppiert (die Gruppe, die in jedem Zyklus verarbeitet).
 
Ich verstehe nicht. wenn wir über das Lesen einer Datei sprechen, dann ist es nicht notwendig, praktisch alles zu tun, weil im Moment die Datei beendet die Zeile, die Sie lesen, gibt nil zurück.
dann die Zeit beendet die Ausführung des Zyklus.

aber vielleicht meinen Sie, dass Sie eine solche Datei haben (enthalten erfunden):
1
2.
3
ANHANG
Stopp!
eine
b)
C
Stopp!
ANHANG
Beta
Stopp!

in der Praxis haben Sie einen Hauptzyklus des Lesens und eine Reihe von Subzyklen, die Sie mit einem Wort beenden (es könnte auch eine leere Zeile sein).
ein Beispiel für das Lesen von Programm (kann es zu einem Editor importieren, um es besser zu sehen):
(defunct read)
(setq f (open "/users/user/desktop/text.txt" "r"))
(setq Zeile (readline f)); anfänglicher Zeilenwert
(while Linie; Hauptzyklus des Lesens
(while (/= Zeile "stop"); Unterzyklus
(Drucklinie)
(setq line (read line f))
(Druck "Endzeile")
(setq line (read-line f)))); notwendig, um Dateien weiter zu lesen
(in der Nähe f)
(princ)

dass zurückkehrt (Ich habe bewusst geschrieben, dass das Lesen von Zyklen und Subzyklen funktioniert):
"1"
"2"
"3"
"4"
"end line"
"a"
"b"
"c"
"end line"
"Alpha"
"beta"
"end line"

Sie werden feststellen, dass ein initialer Zeilenwert zugewiesen wird, weil sonst er leer wäre.
dann gibt es eine Reihe von Subzyklen, wo der Ausgang, den Sie haben, wenn Sie die Sitzung stoppen.
aber wenn ich aus dem Subcycle komme, brauche ich einen neuen Zeilenwert und dann muss ich die Lesezeile wieder verwenden.
Auf diese Weise, wenn die Zeile endet Zeile nil gehen und dann das Programm kommt aus dem Hauptzyklus.

Wenn ich Ihnen vorschlagen kann, werfen Sie einen Blick auf das Handbuch: "Mein roter roberto lisp (Sie finden es sofort mit google) wo es geht sofort an den Punkt erklären Dinge, ohne zu viele Drehungen von Worten zu machen.
Sie finden die verschiedenen Möglichkeiten, während (mit Initial- oder Endverifikation) und andere Zyklen zu verwenden.

p.s.
Tut mir leid, ich weiß nicht, wie ich Ihnen den Code zeigen soll, der mit den richtigen Ausweisen geschrieben wurde, wie ich ihn auf meinem Computer habe.
 
für Beine
Dank der Info. In der Tat ist mein Fall nicht kompliziert, aber es ist nicht sehr einfach zu verwalten, Sie finden es auf dem Forum.
Datei lisp ist in meinem Thema Last stl.
Jetzt funktioniert es aber musste die Bedingung vorgeben, wenn es als Bolzen wirkt, um die Anweisungen zu vervollständigen, die während des Zyklus muss immer vollenden.
Ich meine, ich glaube nicht, dass ich falsch bin, wenn ich sage, dass ich gelernt habe, dass der Zyklus, der mehr Anweisungen enthält, wenn einer von diesen, während des Zyklus selbst, ändert die notwendige Bedingung, er neigt immer noch, es zu vervollständigen. Natürlich hört er auf, aber erst bevor er eine neue antritt.
Heute habe ich mich dazu verpflichtet, die mir gemeldete Lösung anzuwenden, d.h. den Zyklus so zu synchronisieren, dass er die Zeilen liest, es ist der letzte, der ihm sagt, dass sich die Bedingungen geändert haben.
so ist er "inoffensiv" . lesen Sie die letzte Anweisung, die seinen Zustand der Wiederholung bricht, wird nicht mehr gesetzt, um eine neue durchzuführen.Warum darf er nicht über die Enddatei lesen? Natürlich gibt er mir keinen Fehler, über die Enddatei wird mir nil .. aber der Punkt ist, dass, wenn er mich mit nil die Knoten eines Netzes ausfüllt, es ist der Kad, dass Pisse... außer er setzt andere Bedingungen.
anstatt Ich möchte den Code so sauber wie möglich, ich möchte diesen gesegneten verwenden und ihn sofort an der Änderungsbedingung stoppen. Änderung der Bedingung am Ende des Zyklus würde mich mit seinem Kriterium "harmonisieren". Ich muss nur sehen, ob ich meinen Code auf andere Weise komplizieren kann.
Danke.
 
Ich erinnere mich, dass ich selbst im Skup Rubin dieses Musterkriterium hatte, während ich, im Gegensatz zu anderen Sprachen, die Sie sofort herauswerfen. aber in ruby hatte ich einfach gelöst, mit der Anweisung, die die Anzahl der Gesamtzeilen einer Datei zurückgibt, die in lisp ich nicht, und ich hatte mit einem für ... gelöst.
 
Ich komme zurück.
getan, Synchronisation war noch einfacher als ich dachte, und synchronisieren Sie in der Zeit, als die letzte Lesung seines einzigen Zyklus, die Überprüfung der Bedingung, erlaubte mir, ohne die weitere Kette des Falls zu beseitigen.
eine Einsparung, die, auch ohne Tests, mir wichtig erscheint, als eine zusätzliche Bedingung, die für vielleicht 60 Tausend Gesichter eines soliden überprüfen sollte... sagen wir, dass die Idee von Joblayer ist wirklich elegant.
Jetzt nutze ich aus, um einige nicht-essentielle Dinge auf Datei lisp, Typ cmdecho, ich platzieren die Kompensationen, und laden Sie die neue Version in Thema geladen Format stl...
Vielen Dank!
 
Ich erinnere mich, dass ich selbst im Skup Rubin dieses Musterkriterium hatte, während ich, im Gegensatz zu anderen Sprachen, die Sie sofort herauswerfen. aber in ruby hatte ich einfach gelöst, mit der Anweisung, die die Anzahl der Gesamtzeilen einer Datei zurückgibt, die in lisp ich nicht, und ich hatte mit einem für ... gelöst.
die logischste Straße, die ich denke, ist die der Nutzung der Zeit, aber niemand verbietet, die Zeilen einer Datei zu zählen, die sie öffnet und mit einer Weile innen einfügen (setq nrighe (+ 1 nrighe))) und sofort nach dem Schließen, und dann verwenden Sie eine (repeat nrighe ....)
 
die logischste Straße, die ich denke, ist die der Nutzung der Zeit, aber niemand verbietet, die Zeilen einer Datei zu zählen, die sie öffnet und mit einer Weile innen einfügen (setq nrighe (+ 1 nrighe))) und sofort nach dem Schließen, und dann verwenden Sie eine (repeat nrighe ....)
Nun ja, ich habe es bei anderen Gelegenheiten getan, aber es ist nicht sehr "wirtschaftlich", in Bezug auf die Zeit, mit stl Dateien aus Zehntausenden von Zeilen, wäre es verheerend. .
 
ZEITSCHRIFTENDanke, lasst uns sehen, wie es kommt (denken, das bringt mich nicht Farben):
Code:
(defunct read)
(setq f (open "/users/user/desktop/text.txt" "r"))
(setq Zeile (readline f)); anfänglicher Zeilenwert
(while Linie; Hauptzyklus des Lesens
(while (/= Zeile "stop"); Unterzyklus
(Drucklinie)
(setq line (read line f))
(Druck "Endzeile")
(setq line (read-line f)))); notwendig, um Dateien weiter zu lesen
(in der Nähe f)
(princ)
Ich habe die ID benutzt, um sie zu verstehen, welche Teile interner sind.
@gio_sIch habe es wahrscheinlich nicht verstanden.
Ich finde es seltsam, dass Sie so viele Nils am Ende der Datei setzen. Wenn Sie einen Blick auf meinen Code (auch wenn nicht auf Ihren spezifischen Fall angewendet) von nil erzeugt wird nur ein und alles schließt dort. das Programm verlässt den Zyklus und schließt die Datei.
Leider hatte ich keine Zeit, Ihre Datei anzuschauen. Wenn ich ihn am Abend beobachten kann.
 
Nein, es ist einfach, es ist nicht, dass ich so viele Nils, der Punkt ist, dass, wenn die Lese nicht mehr Zeilen zu lesen hat, und in der Schleife ist es immer noch gefolgt von einer Reihe von 3Dface Top-Bewertungen, nach dem, was es lesen... Wenn Sie nichts zu lesen haben, werde ich versuchen, den Cad der Vertiken mit x,y,z von nil...
dafür musste ich genau in den Zyklenarbeiten beenden und nicht in einem nachfolgenden Zyklus entlüften... Jetzt ist alles synchronisiert. Sie finden Version 2, eingerichtet. Wenigstens hoffe ich. Ich habe es mit verschiedenen Dateien versucht und es ging immer reibungslos.
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben