2014-03-06 2 views
0

아래의 데이터 구조에서 테이블을 만들 필요가 있습니다. 왜냐하면 각 한 줄의 레코드가 얼마나 많은 레코드가 입력 파일에 있는지 확신 할 수 없기 때문입니다. 내가 테이블을 만들 수 있다면 나중에 할 수 있어야하는 것을 나중에 반복 할 수있을 것입니다.데이터 구조에서 Cobol에 TABLE을 생성 하시겠습니까?

** 질문 : 전에 데이터 구조에서 테이블을 만드는 방법은 무엇입니까? 파트 B : 코볼의 배열은 내가 그 테이블이 보일 것입니다 생각하는 방법으로 100 배

01 PRECORD.        
    05 JE.        
     10 NE   PIC X(6) VALUE SPACES. 
     10 NM   PIC X(2) VALUE SPACES. 
    05 FILL1   PIC X(16) VALUE SPACES. 
    05 TM    PIC X(7) VALUE SPACES. 
    05 FILL2   PIC X(6) VALUE SPACES. 
    05 TT    PIC X(7) VALUE SPACES. 
    05 FILL3   PIC X(13) VALUE SPACES. 
    05 TTY   PIC X(10) VALUE SPACES. 
    05 FILL4   PIC X(13) VALUE SPACES. 
01 PRECORD. 
    02 table-counter <-- this is used to hold the number of records        
    02 tTable occurs 300 times. <-- creates a table with three hundred occurences 
    05 JE.        
     10 NE   PIC X(6) VALUE SPACES. 
     10 NM   PIC X(2) VALUE SPACES. 
    05 FILL1   PIC X(16) VALUE SPACES. 
    05 TM    PIC X(7) VALUE SPACES. 
    05 FILL2   PIC X(6) VALUE SPACES. 
    05 TT    PIC X(7) VALUE SPACES. 
    05 FILL3   PIC X(13) VALUE SPACES. 
    05 TTY   PIC X(10) VALUE SPACES. 
    05 FILL4   PIC X(13) VALUE SPACES. 

위의 코드는 업데이트입니다 발생합니다. 테이블에는 맨 위에 카운터가 있고 그 다음에 테이블이 생겨야하고 테이블이 몇 번 발생해야합니다.

내가 물었던 질문은 위와 같은 테이블을 실제로 테이블로 만드는 방법이었습니다. 나는 당신이 발생을 만들어야 만한다는 것을 알지 못했고 모든 것을 그 수준 아래에 두었습니다.

01 mytable. 
    02 counter... 
    02 tablevar occures 200 times. 
     05 var... 
     05 var2.. 

나는 코볼 (Cobol) 테이블의 구조가 확실하지 않았습니다. 제 질문은 코볼 데이터 구조의 형식이 무엇입니까?

+0

나는 당신이 성취하고자하는 바를 분명히해야한다고 생각합니다. 우리는 기록을 읽고, 기록을 처리하고, 다음을 읽습니다. 파일 끝까지 계속하십시오. 때로는 이전 레코드를 저장하거나 레코드 그룹을 저장해야합니다. 알려진 최대 크기의 참조 파일의 경우 성능상의 이유로 WORKING-STORAGE에로드 할 수 있습니다. 우리가하지 않는 것은 오래된 파일을 메모리에 읽어 들인 후 처리하는 것입니다. Enterprise COBOL V5.1을 사용하지 않는 한 엔트리 수가 무제한 인 테이블을 가질 수 없습니다. 명확히하십시오. –

+0

내가 가지고 있지 않습니다. 그 직장에있는 남자가 나에게 200 번 일어난 테이블을 만들라고했습니다. 작업중인 파일은 파일에서 레코드를 업데이트하거나 삭제하는 데 사용되는 레코드가있는 parmcard입니다. 레코드는 모두 한 줄로되어 있습니다. 그는 일자리 당 40 개 이상의 기록이있을 것이라고 생각하지 않았습니다. Java 또는 C# 부분과 다른 방식 인 Cobol 프로세스를 실행하려면 JCL을 사용해야합니다. –

답변

0

개인적으로 필자는 table-counter을 PIC 9 (03)과 함께 77 레벨로 선언하겠다고 개인적으로 선언합니다. 그리고 실제로는 VALUE 절을 제거해야합니다. 물론 테이블에 파일이 없으므로 FD이 아닌 WORKING-STORAGE 항목이 필요합니다. 그것 이외에, 당신이 돔을봤을 때 유효한 것으로 보이지만 - 당신이 묻는 질문을보기가 어렵습니다.

+1

더 이상 혜택을받지 못하는 77 세는 이제 PICture가있는 01에 해당합니다. 깔끔하게 보이며 "77의 특별한 점은 무엇입니까?"라는 질문을 제기하지 않습니다. 이는 현재 아무것도 아닙니다. –

+1

@BillWoodger 물론 77s 혜택이 있습니다. 예를 들어 77 세가 사용되어야하는지 아닌지에 대해 지역의 PhD와의 논쟁을 시작하는 것. (나는 당신이 박사가 아니라고 추정 할 것입니다 ...) – Magoo

+1

PhD에서 멀리 떨어져 있습니다. 77이 무엇인지에 대한 지식이 필요합니다. 그러나 요즘은 그 의미가 "매우 심하게 철자 된 01"입니다. –

1

테이블 카운터에 PICture가 필요합니다.

어떤 그림이 있습니까? 의견은 다양합니다.

이 값, 2 진수, 10 진수 및 디스플레이 숫자에 유용한 세 가지 숫자 형식이 있습니다.

nn table-counter COMP/COMP-4/BINARY/COMP-5 PIC 9(4). 
nn table-counter COMP-3/PACKED-DECIMAL PIC 9(3). 
nn table-counter PIC 9(3). 

가장 효율적인 정의는 2 진수입니다. packed-decimal을 사용하면, 컴파일러는 subscript (리터럴 제외)에 사용하는 것과 비교하여 사용할 때 이진으로 변환하는 코드를 생성합니다. display-numeric을 사용할 때 컴파일러는 먼저 packed-decimal로 변환 한 다음 이진으로 변환하는 코드를 생성합니다.

요즘에는 기계의 속도가 중요합니까? 글쎄, 그들이 중요하지 않다면, 효율적일지도 모르지만, 의견은 다양합니다.

PICture의 크기는 어느 정도입니까? 바이너리의 경우 9 (4)는 최대 값으로 9999까지 허용합니다. 999를 코딩 할 수는 있지만 이점이 많지 않으므로 (300으로 제한 할 수는 없습니다) 크기에 맞게 최적으로 처리합니다 (포장 소수점 (COMP-3)의 경우 999 일 것임). 아무것도 얻지 못하면 네 번째 숫자가 나옵니다.) display-numeric을 사용하는 경우와 동일합니다. 다시, 의견은 다양합니다.

Magoo가 지적한대로 레코드 인 경우 레코드 시작 부분에 카운트를 추가 할 수 없습니다. FD 아래의 FILE SECTION에 테이블을 보관할 수 없습니다. WORKING-STORAGE SECTION으로 가야합니다.

그러면 서로 일치해야하는 두 가지 구조를 "단계적으로"유지하는 문제가 있습니다.

아마도 레코드 레이아웃 용 카피 북을 가지고있을 것입니다.가장 좋은 점은 COPY 문에서 REPLACING을 사용하여 두 가지 목적으로 동일한 카피 북을 사용할 수 있도록 카피 본의 이름을 매개 변수화 할 수있는 경우입니다. 그런 다음 카피 북에 01 레벨이 포함되어 있지 않은 것이 중요합니다. 다시 카피 북에 01을 포함 시키면 의견이 달라 지지만 운이 좋을 수도 있습니다.

모든 의견을 고려해 볼 때, "우물, 나는 무엇을해야합니까?" 당신이하는 일은 그들이 당신의 사이트에서하는 방식입니다. 현지 표준에 대한 문서가 있어야합니다. 이것은 모든 것을 다루지 않을 수도 있습니다. 동료의 의견을 구해야 할 수도 있습니다. 거의 모든 방식으로 코드를 작성하면 코드를 더 쉽게 이해할 수 있습니다.