2017-12-08 24 views
1

こんにちは、私は、PeopleSoft内SQRプログラムを開発する方法を学ぶに新しいです。私たちが利用しているいくつかのプログラムを見ていて、誰かがこのWhileループで以下のコードスニペットが何をしているのかを明確にするのに役立つかどうかを見たいと思っていました。支援が

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 

私は(私が理解したようWHILE文は論理式として「1と$ OUT_FILE」を評価している、または1変数#1 END-FILEの値として評価されているかどうかを理解しようとしていますこの変数は0または1のいずれかに設定されます)。

+0

使用「#未END-FILEながら」とあれば、チェックを外します。 – Bob

答えて

0

真のループで、BREAKに達するまでそこに行きます。 この場合、#END-FILEがtrueの場合、ループは中断します。

+0

だから、1の間、それは本当に間違っているのですか?しかし、私はまだ苦労している部分です。 – Nick

+0

ファイルに行がある間は、それを読み続けるでしょう.... thats this code – Walucas

0

ファイル名に加えて、openコマンドはファイルのハンドラとして使用するパラメータとして数値を使用します。あなたの例では、2つのファイルが開かれています。

WHILE 1ステートメントはファイル1とは何の関係もありません。ここで、1は偽の場合は0ではなく、真を意味します。したがって、1は常に真であり、ループ内の何かが壊れていなければ、無限ループを作ります。この場合はBREAKコマンドです。

#END-FILE変数には、ファイルカーソルがEOFにない場合はFALSE、ファイルカーソルがEOFの場合はTRUEが含まれます。

コードの少ない行を使用し、次のようになります理解しやすいです、代替、:

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