协助理解sqr逻辑

时间:2017-12-08 16:47:03

标签: peoplesoft sqr

您好,我是学习如何在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)。

2 个答案:

答案 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