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 语句是否将“$Out_File as 1”评估为逻辑表达式,或者将 1 评估为变量 #END-FILE 的值(据我了解,此变量设置为 0或 1)。

4

2 回答 2

0

它是一个真正的循环,它会一直到那里直到达到 BREAK。在这种情况下,如果#END-FILE 为真,则循环将中断。

于 2017-12-08T16:54:33.287 回答
0

除了文件名之外,open 命令还将一个数字作为参数,用作文件的处理程序。在您的示例中,正在打开两个文件。

WHILE 1 语句与文件 1 没有任何关系。这里 1 表示 true,而不是 0 表示 false。所以 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
于 2017-12-09T04:10:33.737 回答