2017-12-08 2 views
1

Hallo, ich bin neu zu lernen, wie man sqr Programme innerhalb People zu entwickeln. Ich habe einige Programme durchgegangen, die wir verwenden, und wollte sehen, ob jemand helfen könnte, klarzustellen, was der folgende Codeschnipsel in dieser While-Schleife macht.Unterstützung bei Verständnis sqr Logik

if $path != '' 
    let $Archive_File = $path || 'ARCHIVE\' || $filename || $Curr_Date || '.dat' 
    open $Out_File as 1 for-reading record=450:vary status=#fileread 
    open $Archive_File as 2 for-writing record=450:vary status=#filewrite 
    While 1 
    if #END-FILE 
     break 
    else 
     read 1 into $Current_Line:999 
     write 2 from $Current_Line 
    end-if  
End-While 
close 1 
close 2 
end-if 

Ich versuche, wenn die While zu verstehen, die „$ out_file als 1“ als logische Ausdruck Auswertung oder 1 als Wert der Variablen # END-FILE ausgewertet (Wie ich verstehe Diese Variable wird entweder auf 0 oder 1 gesetzt.

+0

Use „While Not # END-FILE“ und entfernen Sie das, wenn überprüfen. – Bob

Antwort

0

Es ist eine echte Schleife, es wird dort gehen, bis ein Break erreicht. In diesem Fall, wenn # END-FILE wahr ist, wird die Schleife unterbrochen.

+0

So sagt es While 1, was wirklich wahr bedeutet? Während das stimmt, ist der Teil, mit dem ich immer noch kämpfe ... – Nick

+0

Während die Datei Zeilen hat, wird es weiterlesen .... das ist dieser Code – Walucas

0

Zusätzlich zum Dateinamen erhält der Befehl open eine Zahl als Parameter, die als Handler für die Datei verwendet wird. In Ihrem Beispiel werden zwei Dateien geöffnet.

Die Anweisung WHILE 1 hat nichts mit Datei 1 zu tun. Hier bedeutet 1 "Wahr" anstelle von "0" für "Falsch". Also ist 1 immer wahr und erzeugt eine Endlosschleife, außer wenn etwas innerhalb der Schleife ausbricht, wenn es das ist, was in diesem Fall der BREAK-Befehl ist.

Die Variable # END-FILE enthält FALSE, wenn der Dateicursor nicht EOF ist, und TRUE, wenn der Dateicursor EOF ist.

Eine Alternative, die weniger Codezeilen verwendet und ist leichter zu verstehen, könnte wie folgt aussehen:

if $path != '' 
    let $Archive_File = $path || 'ARCHIVE\' || $filename || $Curr_Date || '.dat' 
    open $Out_File as 1 for-reading record=450:vary status=#fileread 
    open $Archive_File as 2 for-writing record=450:vary status=#filewrite 
    While Not #END-FILE 
    read 1 into $Current_Line:999 
    write 2 from $Current_Line 
    End-While 
    close 1 
    close 2 
end-if 
Verwandte Themen