2013-11-14 3 views
2

이 연습의 목표는 입력 파일을 읽고 테이블에 저장 한 다음 입력 내의 특정 필드의 유효성을 검사하고 오류 레코드를 출력하는 것입니다. 각 정책 그룹을 읽고 저장하여 전체 파일 대신 테이블에 한 번에 5 개의 레코드 만 저장되도록해야합니다.COBOL 읽기/저장 테이블

그래서 나는 처리를 수행 한 후

This is the input file. 
10A 011111   2005062520060625          
20A 011111000861038              
32A 011111       79372        
60A 0111112020            6   4 
94A 011111  080 1              
10A 02222   2005082520060825          
20A 022221000187062              
32A 022221       05038        
60A 0222212003            6   4 
94A 022221  090 1              
.... 

내가로드 할 수 있었다 .. 파일이 끝날 때까지 등 향후 5 개 기록을 읽고, 5 개 기록하는 정책 그룹에서 읽을 필요 내 테이블에 OCCUR 5 TIMES를 갖는 것으로 첫 번째 5 개의 레코드를 테이블에 기록하지만 계속 진행할 방법을 모르겠습니다. 내 코드는 아래와 같습니다. (필자는 올바르게 작동하는지 확인하기 위해 썼습니다. 다만 처음 5 개가 아닌 처음 4 개의 레코드가있는 헤더 행을 인쇄합니다. 01 테이블.

05 T1-RECORD-TABLE.         
    10 T1-ENTRY    OCCURS 5 TIMES  
           INDEXED BY T1-INDEX. 

     15 RECORD-TYPE-10  PIC X(80).   
     15 RECORD-TYPE-20  PIC X(80).   
     15 RECORD-TYPE-32  PIC X(80).   
     15 RECORD-TYPE-60  PIC X(80).   
     15 RECORD-TYPE-94  PIC X(80).   

copy trnrec10. 
COPY TRNREC20. 
COPY TRNREC32. 
COPY TRNREC60. 
COPY TRNREC94. 
..... 

Z200-READ-FILES.        
    READ DISK-IN INTO T1-ENTRY(T1-INDEX)  
     AT END MOVE 'YES' TO END-OF-FILE-SW. 

    WRITE PRINT-RECORD FROM T1-ENTRY(T1-INDEX). 

(즉 좋은 것이지만 : P) 나는이에 대한 단계별로 단계를 싶지 않아 난 그냥 내 교과서 기원전 그것을 할 방법을 모르는 무엇을해야하는지 알고 BC와 코스 노트는 나에게 쓸모가 없다. 나는 잠시 동안 이것에 붙어 있었고 나는 아무것도 시도하지 않았다.

답변

2

교과서, 코스 노트, 매뉴얼, 편집기, JCL 및 컴퓨터가 있습니다.

이 모든 것들이 여러분에게 유용 할 것입니다.하지만 여러분은해야 할 일처럼 생각해야합니다.

당신의 임무는 파일을 읽고 테이블에 5 개의 레코드를로드하고, 그 중 일부 레코드를 테이블에로드 한 다음 그 레코드를 작성하는 것입니다.

파일을 읽고 작업을 수행하고 파일을 쓰는 작업이 많습니다.

먼저 파일 처리를 먼저 처리하는 방법은 어떻습니까?

은하지 않을 경우 "00"이상 종료를, 파일을 열 (사이트 표준에 따라, 또는 섹션) 그 단락에서 파일 상태

PERFORM OPEN-INPUT-POLICY-MASTER 
PERFORM OPEN-OUTPUT-NEW-POLICY-MASTER 

을 사용하여 파일을 정의 파일의 상태를 확인합니다.

READ 단락이 필요합니다. 거기서 읽으면 파일 상태를 확인하고 "10"은 유효하며 파일 끝을 나타냅니다 (따라서 AT END 및 END-READ가 필요하지 않음). 읽은 모든 레코드를 센다 (파일 상태 "00").

쓰기 단락이 필요합니다. 파일 상태를 확인하십시오. "00"만 유효합니다. 기록 된 기록을 세십시오.

PERFORM PRIMING-READ-OF-POLICY-MASTER 

단락은 수행 단락 단락 만 수행하면됩니다. 그것을 자신의 단락에 넣는 것은 그것이하는 일을 문서화하는 방법입니다. 다음 사람을 따라 가라.

무엇이 있나요? 첫 번째 레코드를 읽거나 읽으려고 시도합니다. 파일이 비어 있으면 파일 상태가 "10"이됩니다. 파일이 비어 있으면 안됩니다. 이제 처리 논리에 영향을주지 않고 빈 파일을 처리했습니다.

PERFORM PROCESS-POLICY-MASTER UNTIL END-OF-POLICY-MASTER 

또는

PERFORM UNTIL END-OF-POLICY-MASTER 
    .... 
END-PERFORM 

내가 "확산"주요 논리를 방지하기 위해, 첫 번째를 선호하지만, 당신이 선호하는 경우가 두 번째로 시작 괜찮습니다/당신의 과정에 적합합니다.

단락의 마지막 부분 또는 끝 부분이 읽은 부분의 마지막 부분입니다.

그런 다음 CLOSE-INPUT-POLICY-MASTER를 수행 할 수 있으며 출력 파일과 유사 할 수 있습니다.

그런 다음 개수가 동일한 지 확인하십시오. 그렇지 않다면, 버리십시오. 이 예제에서는 자명하지만 논리가 복잡해지면 상황이 잘못 될 수 있습니다.

입력을 출력, 개수 추가, 삭제에 맞게 조정하려면 항상 카운트를 제공하십시오. 정보를 위해 별도로 업데이트를 계산하십시오. 프로그램이 할 수있는 것을 확인하십시오. 입력 레코드보다 많은 갱신 사항이 있으면이를 식별하고 이상 종료하십시오. 프로그램에서 최대한 많은 검증을 수행하십시오.

이제 파일을 읽고, 파일을 쓰고, 가능한 한 검사하고, 처리 논리가 부족한 간단한 프로그램을 갖게됩니다.

하나의 파일을 읽고 다른 프로그램을 작성하는 모든 작업의 ​​기초로이 프로그램을 사용할 수 있습니다.

아무 것도하지 않고도 모든 프로그램이 새 프로그램에서 작동합니다.

지금 필요한 논리는 테이블에 데이터를 저장하는 것입니다.

길버트가 올바르게 표시 했으므로 테이블에 저장하는 것이 실제 사례에서는 의미가 없습니다. 그러나 그것은 요구 사항입니다. 당신은 테이블에서도 잘해야합니다.

테이블이 올바르게 정의되지 않았습니다. 이것을 시도하십시오 :

01 T1-RECORD-TABLE.         
    05 T1-ENTRY    OCCURS 5 TIMES  
           INDEXED BY T1-INDEX. 

     10 POLICY-RECORD. 
      15 POLICY-RECORD-TYPE PIC XX. 
      15 POLICY-RECORD-DATA PIC X(78). 

각각의 기록 유형에 대해 POLICY-RECORD-TYPE 아래에 88을 넣으십시오. 비즈니스 기능을 설명하는 88을 "RECORD-IS-TYPE-10"이라고만하지 마십시오.

테이블의 항목을 참조하는 데 인덱스를 사용하고 있습니다. 첫 번째 엔트리를 테이블에 넣기 전에 인덱스를 1로 설정해야합니다. 다음 엔트리에 액세스하려면 인덱스를 1로 설정해야합니다.

테이블에 항목을 저장 한 후에는 그들을 다시 만난다. 인덱스를 다시 1로 설정하면 첫 번째 항목을 참조 할 수 있습니다. 다른 항목에 액세스하려면 인덱스를 순차적으로 1만큼 설정하십시오.

처리를 시작하기 전에 인덱스를 1로 설정하십시오. 0을 테이블 항목 수로 이동하십시오. 파일 처리 루프를 시작하십시오.

테이블 항목 수가 5에 도달 할 때마다 저장할 항목을 계산하고 단락을 작성하여 레코드를 출력하고 색인을 1로 설정하십시오. 수가 5가 아닌 경우 색인을 1 씩 위로 설정하십시오.

단락에서 레코드를 출력하려면 PERFORM VARYING에서 인덱스를 1에서 1보다 크게 선택하십시오. 5. PERFORM에서 현재 테이블 항목을 기록 원본으로 사용하여 WRITE 단락을 수행하십시오.

이제는 입력 파일을 읽고 동일한 출력 파일을 생성하는 두 개의 프로그램을 갖게됩니다.

그런 다음 확인 로직을 수행 할 수 있습니다.

모든 것을 해체하고 일들을 분리하지 않고 간단하게 유지하고 이름을 잘 지정하면 특정 비즈니스 로직을 제외하고는 같은 COBOL 프로그램을 작성하기 시작할 것입니다. 모든 표준 재료, 모든 지루한 재료, 원한다면 모든 기본 구조는 동일하게 유지됩니다. 새로 작성한 코드는 다음 작업의 세부 사항입니다.

예, 참조 파일 또는 여러 입력으로 더 많은 파일을 읽을 수 있습니다. 당신은 여러 개의 출력을해야합니다. 그러나 당신은 정확히 같은 방식으로 모든 이들의 기본을 구축 할 수 있습니다. 그러면 미래의 프로그램을 기반으로하는 더 많은 예가있을 것입니다.

기본 사항을 얻은 후에는 다시 코딩 할 필요가 없습니다. 당신은 단지 복사하고 적용합니다.

좋은 이름을 사용하면 프로그램에서 무엇을하는지 알 수 있습니다.

실제로 작성한 코드는 "재미있는"자료 일 뿐이며 "항상"하는 자료는 아닙니다.

저는 이것을 "설계"했습니다. 그것은 유일하게 실행 가능한 디자인이 아닙니다. 그것은 내가 어떻게하고, 얼마 동안했는지입니다. 또한 처리의 모든 부분을 설계해야합니다. 코드를 작성하기 전에 무엇을하는지 알아야합니다.

예를 들어, 간단한 루프를 만드십시오. 어떻게 테스트 할 지 상상해보십시오. 테이블에 항목이 없으면 어떻게됩니까? 하나? 중간 번호로? 최대치보다 하나 적은? 최대? 최대치보다 하나 더요? 최대 10 개 이상? 그런 다음 해당 사례를 다루는 방법을 알아야한다는 것을 알고 코드를 작성하십시오.

너무 길지 않아 코딩하는 동안 하위 수준 디자인에 대해 생각할 것입니다. 더 많은 시간 동안 고급 디자인을 그렇게 할 것입니다. 충분한 시간 동안 당신은 전에 다룰 필요가없는 것들만 디자인 할 것이고 나머지는 이미 알고있을 것입니다.

교과서, 코스 노트, 매뉴얼, 편집기, JCL 및 컴퓨터가 있습니다. 나는 너에게 몇 가지 아이디어를 주었다. 모두 함께 찍은 것이 당신에게 유용할까요? 네가 지금 몇 가지 좌절감을 가지고 있다고 생각해. 몇 가지 기본 프로그램을 작성한 다음 작업에 적용하십시오.

+0

와우! 시간을내어 모든 것에 대한 멋진 설명을 해주셔서 감사합니다. 저의 주요 문제는 테이블을 정의하는 방법이었고, 당신은 저를 위해 그것을 분명히했습니다. – Meg

5

모든 정책 그룹에 5 개의 레코드 유형이있는 레코드가 정확히 5 개 있다고 가정합니다.

이와 같이 작업 저장소를 설정할 수 있습니다.

05 T1-RECORD. 
    10 T1-RECORD-TYPE    PIC XX. 
    10 FILLER      PIC X(78).  

COPY TRNREC10. 
COPY TRNREC20. 
COPY TRNREC32. 
COPY TRNREC60. 
COPY TRNREC94. 

그러면 읽기 단락은 다음과 같이 보입니다. 나는 TRNREC10-RECORD가 TRNREC10 카피 북의 01 레벨이라고 생각했다. 그렇지 않은 경우 다음 코드에서 실제 01 수준을 대체하십시오.

2200-READ-FILE.        
    READ DISK-IN INTO T1-RECORD  
     AT END MOVE 'YES' TO END-OF-FILE-SW. 

    IF END-OF-FILE-SW = 'NO' 
     IF T1-RECORD-TYPE = '10' 
      MOVE T1-RECORD TO TRNREC10-RECORD 
     END-IF 
     IF T1-RECORD-TYPE = '20' 
      MOVE T1-RECORD TO TRNREC20-RECORD 
     END-IF 
     ... 
    END-IF. 

당신의 쓰기 단락은 귀하의 처리 문단은 카피 북 기록의 데이터에 액세스 할이

2400-WRITE-FILE. 
    WRITE PRINT-RECORD FROM TRNREC10-RECORD 
    WRITE PRINT-RECORD FROM TRNREC20-RECORD 
    ... 

과 같을 것이다.