Помощь в понимании логики 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, цикл будет прерван.