1인 코볼 재연수~표편~

이것의 후속.드디어 마지막 회다.업데이트 속도가 느려서 길게 느껴집니다.
마지막으로 책상을 배우고 싶어요.

테이블 정보


생각은 다른 언어가 말한 배열과 비슷하다.지금까지의 학습 내용이라면 같은 데이터가 여러 번 있을 때 하나하나 정의해야 한다.
예를 들어 표를 사용하지 않고 3개의 데이터 항목을 만들면 이렇게 된다.
3개의 데이터(테이블 미사용)
      *---1---------2---------3---------4---------5-----
       01  DATA.
         03  DATA1            PIC X(10).
         03  DATA2            PIC X(10).
         03  DATA3            PIC X(10).
나 이거 몇 개만 하고 안 했어.
책상 저기 나와.

문법·용법


구문
レベル番号(親)  テーブル名.
  レベル番号(子)  項目名            PIC 型(文字数)  OCCURES 要素数.
표를 정의할 때 데이터 프로젝트를 정의할 때 OCCURES문장을 사용하고 뒤에 만든 표수를 지정한다.
만약 표를 사용한다면 첫 번째 예는 다음과 같다.
3개의 데이터(테이블 사용)
      *---1---------2---------3---------4---------5-----
       01  TABLE.
         03  DATA             PIC X(10) OCCURES 3.
이렇게 되면 대량의 건수라도 대응할 수 있다.또 다차원 배열을 하고 싶을 때는 다음과 같이 할 수 있다.
테이블 레이아웃(테이블 이름: PROFILE-TBL프로젝트 1
프로젝트 2
프로젝트 3DT-NO PIC 9(01) NICNAME PIC X(10) COMMENT X(20)데이터 번호
애칭
메모
※ 아이템 1~아이템 3세트 PROFILEPROFILE-TBL
      *---1---------2---------3---------4---------5-----
       01  PROFILE-TBL.
         03  PROFILE          OCCURS 3.
           05  DT-NO          PIC 9(01).
           05  NICNAME        PIC X(10).
           05  COMMENT        PIC X(20).
상술한 구성 인상은 이렇다.

액세스 데이터 항목


위의 그림에서 보듯이 OCCURES 문장 창설표를 사용하면 같은 항목 이름이 지정한 수량에 따라 접근할 수 있기 때문에 이전의 방법에 따라 접근할 수 없다.액세스하려면 액세스할 색인 번호를 지정해야 합니다.지정하려면, 방문할 항목 이름 뒤에 괄호로 접근하고 싶은 색인 번호를 기재하십시오.
예를 들어 두 번째PROFILENICNAME'ZAMA8722'라면 다음과 같다.
대입례
MOVE  'ZAMA8722'  TO  NICNAME(2).
코볼의 주석 번호는 1부터 시작하기 때문에 여러 나라에서 0부터 습관이 된 경우 주의가 필요하다.

맨 위에서 다 핥을 때.


사용 가능PERFORM VARYING.예를 들어 위에서 만든 표의 모든 항목에 데이터가 있는데 화면을 모두 출력하고 싶을 때 다음과 같이 진행할 수 있다.
전체 순환
      *---1---------2---------3---------4---------5-----
         PERFORM
           VARYING            IDX FROM 1 BY 1
           UNTIL              IDX > 3
            DISPLAY           PROFILE(IDX)
         END-PERFORM.
IDX9(01)형의 덧글자

테이블에 외부 데이터 배치


읽은 기록을 그대로 두면MOVE OK
견본
      *---1---------2---------3---------4---------5-----
       IDENTIFICATION         DIVISION.
       PROGRAM-ID.            SAMPLE.
      *
       ENVIRONMENT            DIVISION.
       INPUT-OUTPUT           SECTION.
       FILE-CONTROL.
         SELECT  IN-FILE      ASSIGN 'infile.dat'
                              ORGANIZATION LINE SEQUENTIAL.
      *
       DATA                   DIVISION.
       FILE                   SECTION.
       FD  IN-FILE            LABEL RECORD STANDARD
                              BLOCK CONTAINS 0 RECORDS.
       01  IN-REC             PIC X(31).
      *
       WORKING-STORAGE        SECTION.
       01  PROFILE-TBL.
         03  PROFILE          OCCURS 3.
           05  DT-NO          PIC 9(01).
           05  NICNAME        PIC X(10).
           05  COMMENT        PIC X(20).
       01  IDX                PIC 9(01).
       01  FLG                PIC X(01).
      *
       PROCEDURE              DIVISION.
       PGM-FLOW               SECTION.
      *-- PGM-FLOW SEC
       PGM-FLOW-S.
         OPEN                 INPUT  IN-FILE.
         MOVE                 SPACE  TO  FLG.
         MOVE                 ZERO   TO  IDX.
         PERFORM              PGM-READ.
         PERFORM              PGM-MAIN
           UNTIL              FLG = '1'.
         CLOSE                IN-FILE.
       PGM-FLOW-E.
         STOP RUN.
      *-- PGM-READ SEC
       PGM-READ               SECTION.
       PGM-READ-S.
         READ                 IN-FILE
           AT END
             MOVE             '1'  TO  FLG
           NOT AT END
             COMPUTE          IDX = IDX + 1
         END-READ.
       PGM-READ-E.
         EXIT.
      *-- PGM-MAIN SEC
       PGM-MAIN               SECTION.
       PGM-MAIN-S.
         MOVE                 IN-REC  TO  PROFILE(IDX).
         PERFORM              PGM-READ.
       PGM-MAIN-E.
         EXIT.
infile.dat
1COBOLER001TABLE SAMPLE
2ALICE     HELLO EVERYONE
3BOB-001   NICE TO MEET YOU

테이블 재정의하기


재정의하여 다른 레이아웃에서 데이터 항목을 참조할 수 있습니다.예컨대
      *---1---------2---------3---------4---------5-----
       01  MEMBER-LIST
         03  FILLER           PIC X(31) VALUE 
             '1COBOLER001TABLE SAMPLE        '.
         03  FILLER           PIC X(31) VALUE
             '2ALICE     HELLO EVERYONE      '.
         03  FILLER           PIC X(31) VALUE
             '3BOB-001   NICE TO MEET YOU    '.
이러한 데이터가 있고 위에서 사용한 표의 레이아웃에서도 사용하고 싶을 때 REDEFINES구를 사용하여 다시 정의합니다.
구문
レベル番号(親)  テーブル名  REDEFINES  再定義するデータ項目.
  レベル番号(子)  項目名            PIC 型(文字数)  OCCURES 要素数.
우선 샘플 절차입니다.
견본
      *---1---------2---------3---------4---------5-----
       IDENTIFICATION         DIVISION.
       PROGRAM-ID.            SAMPLE.
      *
       ENVIRONMENT            DIVISION.
      *
       DATA                   DIVISION.
       WORKING-STORAGE        SECTION.
       01  MEMBER-LIST.
         03  FILLER           PIC X(31) VALUE
             '1COBOLER001TABLE SAMPLE        '.
         03  FILLER           PIC X(31) VALUE
             '2ALICE     HELLO EVERYONE      '.
         03  FILLER           PIC X(31) VALUE
             '3BOB-001   NICE TO MEET YOU    '.
       01  PROFILE-TBL        REDEFINES  MEMBER-LIST.
         03  PROFILE          OCCURS 3.
           05  DT-NO          PIC 9(01).
           05  NICNAME        PIC X(10).
           05  COMMENT        PIC X(20).
       01  IDX                PIC 9(01).
      *
       PROCEDURE              DIVISION.
       PGM-MAIN               SECTION.
       PGM-MAIN-S.
         PERFORM
           VARYING            IDX  FROM 1 BY 1
           UNTIL              IDX > 3
             DISPLAY          NICNAME(IDX)
         END-PERFORM.
       PGM-MAIN-E.
         STOP RUN.
실행 결과
COBOLER001
ALICE
BOB-001
이렇게 하면 고정 길이의 기록이라면 다른 레이아웃으로 데이터를 다시 정의할 수 있다.이번 상황은 다음과 같은 느낌이다.

이번에는 표 학습에 재정의를 기재했지만 일반적인 데이터 항목에도 사용할 수 있다.또한 재정의 전의 데이터 항목의 내용을 바꾸면 재정의 후의 데이터도 변경된다.

이만 마치겠습니다.


어쨌든 연수 교과서를 쉽게 방영할 수 있게 됐다.연수 시간 이외에 이렇게 복습하면 한가한 시간에도 새로운 지식을 배울 수 있다는 것을 더욱 깊이 기억할 수 있다.
지금부터 배분을 시작해서 매번 교과서를 가지고 갈 수는 없기 때문에 출퇴근 시간을 이용해 내가 쓴 기사를 다시 한번 살펴보고 싶다.

감사의 말


이곳을 찾아주신 여러분과 지적 등의 댓글을 남겨주신 여러분께 감사드립니다.

좋은 웹페이지 즐겨찾기