您好,我是学习如何在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语句是否正在将“$ Out_File as”作为逻辑表达式进行评估,或者将1作为变量的值进行评估#END-FILE(据我了解此变量已设置)到0或1)。
答案 0 :(得分:0)
它是一个真正的循环,它会一直到达BREAK。 在这种情况下,如果#END-FILE为真,则循环将中断。
答案 1 :(得分:0)
除了文件名之外,open命令还将一个数字作为参数,用作文件的处理程序。在您的示例中,正在打开两个文件。
WHILE 1语句与文件1没有任何关系。这里1表示true,而不是0表示false。因此1总是如此,创建一个无限循环,除非循环内的某些东西突然爆发,在这种情况下是BREAK命令。
当文件光标不在EOF时,#END-FILE变量包含FALSE,当文件光标在EOF时,#END-FILE变量为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