2016-09-21 10 views
1

그래서 OpenCobolIDE에서 COBOL의 SCREEN SECTION 기능을 사용하여 사용자가 데이터 입력 또는 표시 여부를 선택하는 메뉴를 만드는 프로그램을 만들려고합니다. 이 데이터는 순차적 인 .txt 파일에 기록됩니다. 쓰기 프로세스가 잘 작동하므로이 부분의 코드를 여기에 추가하지 마십시오. 문제는 독서 과정에 있습니다. 프로그램이 내 파일의 모든 레코드를 보여주는 루프 루프에 여러 번 표시하기를 원했지만 작동하지 않습니다. 나는 내 DISPLAY-SCREEN에서 BLANK SCREEN을 제거함으로써 내가 원하는 방식으로 작동 할 것이라고 생각했지만, 그 프로그램은 DISPLAY-SCREEN 한 시간을 보여 주며 어떤 기록도 표시하지 않는다. 무엇이 문제 일 수 있습니까? PERFORMDISPLAY가 너무 빠르다 : 빌로cobol의 루프에 여러 화면을 표시 할 수 있습니까?

IDENTIFICATION DIVISION. 
PROGRAM-ID.PGM001. 

ENVIRONMENT DIVISION. 

INPUT-OUTPUT SECTION. 

FILE-CONTROL. 
    SELECT MYFILE ASSIGN TO "DATA.TXT" 
    ORGANIZATION IS LINE SEQUENTIAL. 
DATA DIVISION. 

FILE SECTION. 
FD MYFILE. 
01 FS-TB. 
    02 FS-ID PIC X(03). 
    02 FS-NAME PIC A(15). 
    02 FS-PHONE PIC X(09). 
WORKING-STORAGE SECTION. 
01 WS-TB. 
    02 WS-ID PIC X(03). 
    02 WS-NAME PIC A(15). 
    02 WS-PHONE PIC X(09). 
01 WS-EOF  PIC A(01) VALUE "N". 
01 WS-COUNT  PIC 9(01) VALUE ZERO. 
01 WS-OP  PIC 9(01). 
SCREEN SECTION. 
01 MENU-SCREEN. 
    02 BLANK SCREEN. 
    02 LINE 1 COL 1 VALUE "------------------------------------". 
    02 LINE 2 COL 1 VALUE "-    MENU    -". 
    02 LINE 3 COL 1 VALUE "------------------------------------". 
    02 LINE 4 COL 1 VALUE "-   (1).REGISTER   -". 
    02 LINE 5 COL 1 VALUE "-   (2).DISPLAY    -". 
    02 LINE 6 COL 1 VALUE "-   (3).EXIT    -". 
    02 LINE 7 COL 1 VALUE "-         -". 
    02 LINE 8 COL 1 VALUE "   OPTION:()    -". 
    02 LINE 9 COL 1 VALUE "------------------------------------". 
    02 LINE 8 COL 20 PIC 9(01) TO WS-OP. 
01 DISPLAY-SCREEN. 
    02 LINE 1 COL 1 VALUE "------------------------------------". 
    02 LINE 2 COL 1 VALUE "-   DISPLAY    -". 
    02 LINE 3 COL 1 VALUE "------------------------------------". 
    02 LINE 4 COL 1 VALUE "-(1).ID   :     -". 
    02 LINE 4 COL 18 PIC X(03) FROM WS-ID. 
    02 LINE 5 COL 1 VALUE "-(2).NAME  :     -". 
    02 LINE 5 COL 18 PIC A(15) FROM WS-NAME. 
    02 LINE 6 COL 1 VALUE "-(3).PHONE  :     -". 
    02 LINE 6 COL 18 PIC X(09) FROM WS-PHONE. 
    02 LINE 7 COL 1 VALUE "------------------------------------". 
PROCEDURE DIVISION. 
A-100. 
    DISPLAY MENU-SCREEN. 
    ACCEPT MENU-SCREEN. 

    EVALUATE WS-OP 
    WHEN 1 
     GO TO A-200 
    WHEN 2 
     GO TO A-300 
    WHEN 3 
     STOP RUN 
    WHEN OTHER 
     GO TO A-100 
    END-EVALUATE. 
A-200. 
A-300. 
    OPEN INPUT MYFILE 
     PERFORM UNTIL WS-EOF = "Y" 
      READ MYFILE INTO WS-TB 
       AT END MOVE "Y" TO WS-EOF 
       NOT AT END DISPLAY DISPLAY-SCREEN 
      END-READ 
     END-PERFORM 
    CLOSE MYFILE. 

    STOP RUN. 
END PROGRAM PGM001. 
+3

는 디스플레이 후 동의 넣어 화면이 너무 빨라서 "명령 행"으로 돌아갑니다 –

답변

3

이미 지적 : 여기에 코드입니다. 더미의 VAR 및 ACCEPT이를 추가하지 않을 경우

, 나는, ACCEPT OMITTED이 작동 추측 DISPLAYACCEPT을 추가 할 수있는 모든 레코드 you'd 필요를 참조하십시오.

PERFORM 동안 프로그램을 중지하고 싶지 않은 경우 프로그램의 끝에 ACCEPT DUMMY을 추가 할 수 있습니다 (확장자가 DISPLAY/ACCEPT 인 경우 항상 유용합니다). 그러나 마지막 항목 만 표시됩니다.

필요에 따라 CALL 'CBL_OC_NANOSLEEP' USING 500000000 원하는 결과가 될 수있는 DISPLAY DISPLAY-SCREEN 후 또는 CALL 'C$SLEEP' USING 1 (반 잠깐만).

그러나 가능성이 가장 좋은 옵션은 Enter 키를 누릅니다 경우는 다음 DISPLAY을하기 전에 지정된 시간을 대기하지 않는 경우 다음 DISPLAY로 직접 이동 ( ACCEPT dummy WITH TIMEOUT time 될 것이다.

+0

DISPLAY DISPLAY - SCREEN 후에 ACCEPT를 시도했지만 첫 번째 레코드 만 표시하는 경우가 있습니다. 당신이 의미하는대로 코드를 만들었습니다. 다음과 같이 보입니다 : 끝내지 않음 DISPLAY 디스플레이 스크린 ACCYT DUMMY –

+0

@LeviMoraes 예, 정확히 옵션 1로 언급 한 것입니다 - 첫 번째 레코드가 끝난 후 Enter 키를 누를 때까지 중단됩니다. 다시 두 번째 다음에 ... - 이것이 작동하지 않는다고 생각하면 전체 프로그램을 복사하고'READ '부분 만 포함하고'DISPLAY record UPON SYSOUT'을 포함하십시오 - 같은 내용을 출력해야합니다 (일시 중지없이 ACCEPT). 옵션 b를 사용하면 조정 가능한 일시 중지 및 자동 다음 디스플레이가 표시된 모든 레코드가 표시됩니다. 개선 사항 : (첫 번째 옵션에이 옵션을 추가합니다) '시간 초과 허용'이됩니다. –

+0

TIMEOUT 절이 컴파일러에서 인식되지 않습니다. 아마도 구문이 엉망이되었습니다. 이것이 맞습니까? TIMEOUT 1000을 사용하여 dummy를 ACCEPT 하시겠습니까? 그리고 더미 변수를 받아들이려면 Enter 키를 눌러야 만 첫 줄에 성가신 "0"이 표시됩니다. 어떻게 그걸 가져갈 수 있니?. 또한 다음 레코드가있는 다음 화면으로 가기 위해 단추를 누르는 대신 화면을 여러 번 표시하면서 모든 레코드를 표시하는 방법이 있습니까? –