你好,我刚开始学习如何在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“作为逻辑表达式计算,还是将1作为变量#END-FILE的值进行计算(据我所知,这个变量设置为0或1)。
发布于 2017-12-09 00:54:33
这是一个真正的循环,它会一直循环到一个中断。在这种情况下,如果#END-FILE为true,循环将中断。
发布于 2017-12-09 12:10:34
除了文件名之外,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-ifhttps://stackoverflow.com/questions/47718696
复制相似问题