Помощь в понимании логики sqr

Здравствуйте, я новичок в изучении, как разрабатывать программы sqr в PeopleSoft. Я просматривал некоторые программы, которые мы используем, и хотел посмотреть, сможет ли кто-нибудь помочь прояснить, что делает приведенный ниже фрагмент кода в этом цикле 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 как 1" в качестве логического выражения, или 1 оценивается как значение переменной #END-FILE (насколько я понимаю, эта переменная установлена ​​в 0 или 1).

2 ответа

В дополнение к имени файла команда open принимает число в качестве параметра, который она использует в качестве обработчика для файла. В вашем примере открываются два файла.

Оператор WHILE 1 не имеет ничего общего с файлом 1. Здесь 1 означает true, а 0 - false. Таким образом, 1 всегда верно, создавая бесконечный цикл, если в нем не произойдет что-то внутри цикла, что в данном случае является командой BREAK.

Переменная #END-FILE содержит FALSE, когда файловый курсор находится не в EOF, и TRUE, если файловый курсор находится в EOF.

Альтернатива, которая использует меньше строк кода и проще для понимания, может выглядеть следующим образом:

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

Это настоящая петля, она пойдет туда, пока не достигнет ПРОРЫВА. В этом случае, если #END-FILE равен true, цикл будет прерван.

Другие вопросы по тегам