2017-12-08 10 views
1

안녕하세요, 저는 피플 내에서 SQR 프로그램을 개발하는 방법을 학습에 새로운 오전. 나는 우리가 활용하고있는 몇몇 프로그램을 살펴보고 누군가가이 While 루프에서 코드의 스 니펫이 무엇을하는지 명확하게 설명 할 수 있는지 알고 싶었다. 내가 알고있는 것처럼 (필자는 WHILE 문을 논리식으로 "1과 $ out_file로 쓰기"를 평가하는 경우 이해하려고 노력 중이 야, 또는 1 변수 #의 END-FILE의 값으로 평가되고지원은

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 

이 변수는 0 또는 1로 설정됩니다).

+0

사용 "을하지 # END-FILE 동안"및 경우에 체크를 해제합니다. – Bob

답변

0

진정한 루프는 BREAK에 도달 할 때까지 계속됩니다. 이 경우 # END-FILE이 참이면 루프가 중단됩니다.

+0

그럼 1시에, 진정한 의미의 진정한 의미는? 비록 사실이지만 나는 여전히 고군분투하고있는 부분입니다 ... – Nick

+0

파일에 행이있는 동안 계속 읽습니다.이 코드는 – Walucas

0

open 명령은 파일 이름 외에도 숫자를 매개 변수로 사용하여 파일의 처리기로 사용합니다. 귀하의 예에서는 두 개의 파일이 열리고 있습니다.

WHILE 1 문은 파일 1과 아무 관련이 없습니다. 여기서 1은 거짓을 나타내는 0 대신 true를 의미합니다. 따라서 1은 항상 true이고 루프 내의 어떤 부분이 빠져 나오지 않는 한 무한 루프를 만듭니다.이 경우에는 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