2016-09-13 7 views
2

그래서 사용자가 자신의 데이터를 입력하고 .txt 파일로 저장하는 것과 같은 양식 화면을 만들려고합니다. OpenCobolIDE를 사용하고 있으며 현재 화면 정리 과정에서 의 문제를 겪고 있습니다. 나는 콘솔 화면에서 사용자가 자신의 데이터를 입력 할 때 변수의 새 값을 새로 고치는 것과 같은 종류의 형식을 가지고 있지만 화면을 지우면 커서 위치가 다시 설정되기 때문에 커서 위치가 엉망입니다. 콘솔 화면의 시작, 그리고 내가이 과정 후에 표시하고있는 텍스트의 끝으로 가고 싶다. 내 설명은 혼란 보일 수 있지만, 난 당신이 코드 내 포인트를 얻을 희망 :화면을 지우고 cobol의 화면 끝까지 커서 위치를 설정하는 방법

IDENTIFICATION DIVISION. 
PROGRAM-ID.PGM001. 

ENVIRONMENT DIVISION. 

DATA DIVISION. 

WORKING-STORAGE SECTION. 
01 WS-DATA 
    02 WS-ID PIC X(03) VALUE SPACES. 
    02 WS-NAME PIC A(15) VALUE SPACES. 
    02 WS-PHONE PIC X(09) VALUE SPACES. 
SCREEN SECTION. 
01 CLEAR-SCREEN. 
    02 BLANK SCREEN. 
PROCEDURE DIVISION. 
MENU. 
    DISPLAY "ID........:" WS-ID. 
    DISPLAY "NAME......:" WS-NAME. 
    DISPLAY "PHONE.....:" WS-PHONE. 
    DISPLAY "-----------". 

    DISPLAY "ID:". 
    ACCEPT WS-ID FROM CONSOLE. 

    DISPLAY CLEAR-SCREEN. 
    DISPLAY "ID........:" WS-ID. 
    DISPLAY "NAME......:" WS-NAME. 
    DISPLAY "PHONE.....:" WS-PHONE. 
    DISPLAY "-----------". 

    DISPLAY "NAME:". 
    ACCEPT WS-NAME FROM CONSOLE. 

    DISPLAY CLEAR-SCREEN. 
    DISPLAY "ID........:" WS-ID. 
    DISPLAY "NAME......:" WS-NAME. 
    DISPLAY "PHONE.....:" WS-PHONE. 
    DISPLAY "-----------". 

    DISPLAY "PHONE:". 
    ACCEPT WS-PHONE FROM CONSOLE. 

    DISPLAY CLEAR-SCREEN. 
    DISPLAY "ID........:" WS-ID. 
    DISPLAY "NAME......:" WS-NAME. 
    DISPLAY "PHONE.....:" WS-PHONE. 
    DISPLAY "-----------". 

    STOP RUN. 
END-PROGRAM PGM001. 

그래서 당신은 내가 화면을 지우고 양식을 displayin 유지하는 것을 알 수 있습니다하지만 난 그것을처럼 커서가의 시작 부분으로 이동 화면과 나는 데이터를 계속 입력 할 수 없다. 누군가 나를 기쁘게 도와 줄 수 있습니까? 커서를 움직이는 명령이 코볼에 있습니까?

+0

Windows 용 OCIDE의 최신 버전을 사용하고 있다면 이미 GnuCOBOL 1.1을 사용하고있을 것입니다 (기본 설정과 about 대화 상자에서 확인할 수 있습니다). 그렇지 않다면 적어도 GnuCOBOL 1.1 (또는 최근 개발 스냅 샷)으로 업그레이드하는 것이 좋습니다. –

답변

3

COBOL에는 DISPLAY 문의 두 가지 유형이 있습니다. 하나는 장치 용이고 다른 하나는 화면 용입니다.

OpenCOBOL에서 장치 및 화면 DISPLAY는 동시에 사용할 수 없습니다. 하려고하면 첫 번째 화면 디스플레이 이후에 장치 디스플레이의 출력이 없음을 알 수 있습니다. 귀하의 예를 들어 보겠습니다. CLEAR-SCREEN이 화면 섹션에 정의되어 있으므로 DISPLAY CLEAR-SCREEN이 화면 DISPLAY입니다.

당신은 화면 섹션의 항목 양식을 정의하여이 문제를 해결할 수 있습니다

SCREEN SECTION. 
01 form BLANK SCREEN. 
    03 VALUE "ID.........". 
    03 COL + 2, PIC X(03) TO WS-ID. 
    03 LINE + 1, VALUE "NAME.......". 
    03 COL + 2, PIC A(15) TO WS-NAME. 
    03 LINE + 1, VALUE "PHONE......". 
    03 COL + 2, PIC X(09) TO WS-PHONE. 
    03 LINE + 1, VALUE "-----------". 

을뿐만 아니라 작업이 절차 부문

DISPLAY form 
ACCEPT form 

로 감소 할 수있는 여분의 장점이있다 모든 양식 데이터를 한 번에 입력 할 수 있기 때문입니다.

, 그러나, 당신은 그대로 데이터 입력을 유지하려면, 당신은 AT LINE <line-num>를 추가하여 화면 표시에 장치 표시를 설정할 수 있습니다 :

DISPLAY "ID........:" WS-ID AT LINE 1 
DISPLAY "NAME......:" WS-NAME AT LINE 2 
DISPLAY "PHONE.....:" WS-PHONE AT LINE 3 
DISPLAY "-----------" AT LINE 4 

DISPLAY "ID:" AT LINE 5 
ACCEPT WS-ID AT LINE 5, COL 5 
+0

두 번째 방법을 시도했지만 커서가 화면의 끝이 아닌 첫 번째 줄의 입력을 계속 기다리고 있습니다. ACCEPT 문이나 그와 비슷한 문구를 지정해야합니까? –

+0

@ levi-moraes 예, 귀하는 다음을 이행 할 것입니다 : 5 번 라인에서 COLUMN 5가 작동해야합니다. –

+0

@LeviMoraes : 이것을 문제의 해답으로 표시하십시오 - 아니면 여전히 열려있는 (그리고 별도의 질문이 아닌) 것이 있습니까? –

1

을 현재 프로젝트에서 그 수를 사용하지 않을 "확장 화면" (GnuCOBOL에 의해 수행 된 기본 curses CALL은 출력을 재설정하고 프로그램 종료 후 최종 결과는 아니며 다른 공급 업체의 "터미널 관리자"도 상당히 동일합니다.) "여전히 일종의 투명"화면을 원했습니다.

가능한 옵션은 다음과 같습니다 : DISPLAY WORKING-STORAGE-PIC-X-2080-ITEM (예상되는 화면 크기에 따라 조정할 수 있음) 또는 덜 휴대 가능 CALL 'SYSTEM' USING 'clear' (이 방법을 시도하지는 않았지만 작동 할 수 있음). 에드워드-H 이미 지적 @

가로 :이 많은 전체 프로그램의 "확장"화면을 사용하는 경우 자동으로 수행되며, 당신은 당신이 모두 얻을 수 있도록 BLANK SCREEN 조항 또는 SPECIAL-NAMES에서 CURSOR IS key-item 같은 추가 옵션을 가지고 커서를 설정하십시오.

그러나 프로그램 종료시 화면이 제거되므로 프로그램을 종료하기 전에 대부분 ACCEPT OMITTED (또는 사용하는 버전이 ACCEPT PIC-X-ITEM-DUMMY을 지원하지 않는 경우)을 추가하려고합니다.