我需要根据地域代码查找每个地区有多少策略.因此,每当我在记录中找到领土时,我需要在表格中增加该区域的计数,然后我就可以将其移动到我的输出中.我无法弄清楚如何根据以下记录计算每个地区的政策.我尝试过各种各样的东西但似乎没什么用.
如果您需要更多信息,请告诉我.
以下是记录的定义和摘录(共57条记录)
rec-94-type pic x(2) rec-94-policy-number pic x(8) filler pic x(5) rec-94-parish-code pic x(3) filler pic x(1) rec-94-territory-code pic x(1) 94A 018517 080 1 94A 027721 090 1 94A 036470 250 6 94A 049137 010 1 ......
我最近的尝试:
05 T2-TERRITORY-COUNT.
10 FILLER PIC X(4) VALUE '1 '.
10 FILLER PIC X(4) VALUE '2 '.
10 FILLER PIC X(4) VALUE '3 '.
10 FILLER PIC X(4) VALUE '4 '.
10 FILLER PIC X(4) VALUE '5 '.
10 FILLER PIC X(4) VALUE '6 '.
10 FILLER PIC X(4) VALUE '7 '.
10 FILLER PIC X(4) VALUE '8 '.
10 FILLER PIC X(4) VALUE '9 '.
05 T2-TERRITORY-TABLE REDEFINES T2-TERRITORY-COUNT.
10 T2-ENTRY OCCURS 9 TIMES
INDEXED BY T2-INDEX.
15 T2-TERRITORY-CODE PIC X.
15 T2-TERRITORY-COUNTER PIC 999.
A000-MAINLINE.
PERFORM B000-OPENING-PROCEDURE.
PERFORM B600-PRINT-HEADINGS.
PERFORM B200-READ-FILE.
PERFORM B300-MAIN-PROCEDURE
UNTIL END-OF-FILE-SW = 'YES'.
PERFORM B800-MOVE-TERRITORY-CODE
VARYING T2-INDEX FROM 1 BY 1
UNTIL T2-INDEX > 9.
PERFORM B110-MOVE-COUNTS
PERFORM B100-CLOSING-PROCEDURE.
STOP RUN.
B000-OPENING-PROCEDURE.
OPEN OUTPUT REPORT-FILE.
OPEN OUTPUT PRINT-FILE.
OPEN INPUT INPUT-FILE.
B100-CLOSING-PROCEDURE.
PERFORM B500-PRINT-TOTAL-LINE.
CLOSE REPORT-FILE.
CLOSE PRINT-FILE.
CLOSE INPUT-FILE.
B200-READ-FILE.
READ INPUT-FILE INTO RECORD-TYPE-94
AT END MOVE 'YES' TO END-OF-FILE-SW.
B300-MAIN-PROCEDURE.
IF REC-94-TYPE = "94"
PERFORM B400-SEARCH-TERRITORY
PERFORM B900-COUNT-POLICIES
ELSE
WRITE REPORT-RECORD FROM RECORD-TYPE-94
END-IF.
ADD 1 TO A-LINE-COUNT.
PERFORM B200-READ-FILE.
B400-SEARCH-TERRITORY.
SET T1-INDEX TO 1.
SEARCH T1-ENTRY
AT END
DISPLAY 'PARISH NOT FOUND IN TABLE'
CALL 'CEE3ABD' USING BY VALUE 12 BY VALUE 1
WHEN
REC-94-PARISH-CODE = T1-PARISH(T1-INDEX)
MOVE T1-TERRITORY(T1-INDEX) TO
REC-94-TERRITORY-CODE
ADD 1 TO A-DISK-COUNTER
PERFORM B700-MOVE-RECORDS
END-SEARCH.
B500-PRINT-TOTAL-LINE.
MOVE A-LINE-COUNT TO TOTAL-RECORDS.
MOVE A-DISK-COUNTER TO TOTAL-POLICIES.
WRITE PRINT-RECORD FROM TOTAL-LINE.
B600-PRINT-HEADINGS.
ADD 1 TO A-PAGE-COUNT.
MOVE A-PAGE-COUNT TO PRINT-PAGE-NUMBER.
WRITE PRINT-RECORD FROM HEADER.
WRITE PRINT-RECORD FROM HEADER-LINE-2.
WRITE PRINT-RECORD FROM COLUMN-LINE.
B700-MOVE-RECORDS.
MOVE REC-94-TYPE TO REC-94-TYPE-OUT
MOVE REC-94-POLICY-NUMBER TO REC-94-POLICY-NUMBER-OUT
MOVE REC-94-PARISH-CODE TO REC-94-PARISH-CODE-OUT
MOVE REC-94-TERRITORY-CODE TO REC-94-TERRITORY-CODE-OUT
WRITE REPORT-RECORD FROM TRNREC94-OUT.
B800-MOVE-TERRITORY-CODE.
MOVE T2-TERRITORY-CODE(T2-INDEX) TO DET-TERRITORY.
WRITE PRINT-RECORD FROM DETAIL-LINE.
B900-COUNT-POLICIES.
MOVE ZEROES TO T2-TERRITORY-COUNTER(T2-INDEX).
SET T2-INDEX TO 1.
SEARCH T2-ENTRY
AT END
DISPLAY 'NO POLICIES FOUND.'
WHEN
REC-94-TERRITORY-CODE =
T2-TERRITORY-CODE(T2-INDEX)
ADD 1 TO T2-TERRITORY-COUNTER(T2-INDEX)
END-SEARCH.
MOVE T2-TERRITORY-COUNTER(T2-INDEX) TO DET-NUMBER-POLICIES.
WRITE PRINT-RECORD FROM DETAIL-LINE.
Run Code Online (Sandbox Code Playgroud)
我会感激任何指针或只是正确的方向进入这个..提前感谢!
我的最终代码:
PERFORM B000-OPENING-PROCEDURE.
PERFORM B600-PRINT-HEADINGS.
PERFORM B200-READ-FILE.
PERFORM B300-MAIN-PROCEDURE
UNTIL END-OF-FILE-SW = 'YES'.
PERFORM C100-MOVE-COUNTS
VARYING T2-INDEX FROM 1 BY 1
UNTIL T2-INDEX > 9.
PERFORM B100-CLOSING-PROCEDURE.
STOP RUN.
B000-OPENING-PROCEDURE.
OPEN OUTPUT REPORT-FILE.
OPEN OUTPUT PRINT-FILE.
OPEN INPUT INPUT-FILE.
B100-CLOSING-PROCEDURE.
PERFORM B500-PRINT-TOTAL-LINE.
CLOSE REPORT-FILE.
CLOSE PRINT-FILE.
CLOSE INPUT-FILE.
B200-READ-FILE.
READ INPUT-FILE INTO RECORD-TYPE-94
AT END MOVE 'YES' TO END-OF-FILE-SW.
B300-MAIN-PROCEDURE.
IF REC-94-TYPE = "94"
PERFORM B400-SEARCH-TERRITORY
ELSE
WRITE REPORT-RECORD FROM RECORD-TYPE-94
END-IF.
ADD 1 TO A-LINE-COUNT.
PERFORM B200-READ-FILE.
B400-SEARCH-TERRITORY.
SET T1-INDEX TO 1.
SEARCH T1-ENTRY
AT END
DISPLAY 'PARISH NOT FOUND IN TABLE'
CALL 'CEE3ABD' USING BY VALUE 12 BY VALUE 1
WHEN
REC-94-PARISH-CODE = T1-PARISH(T1-INDEX)
MOVE T1-TERRITORY(T1-INDEX) TO
REC-94-TERRITORY-CODE
ADD 1 TO A-DISK-COUNTER
PERFORM B700-MOVE-RECORDS
PERFORM B900-COUNT-POLICIES
END-SEARCH.
B500-PRINT-TOTAL-LINE.
MOVE A-LINE-COUNT TO TOTAL-RECORDS.
MOVE A-DISK-COUNTER TO TOTAL-POLICIES.
WRITE PRINT-RECORD FROM TOTAL-LINE.
B600-PRINT-HEADINGS.
ADD 1 TO A-PAGE-COUNT.
MOVE A-PAGE-COUNT TO PRINT-PAGE-NUMBER.
WRITE PRINT-RECORD FROM HEADER.
WRITE PRINT-RECORD FROM HEADER-LINE-2.
WRITE PRINT-RECORD FROM COLUMN-LINE.
B700-MOVE-RECORDS.
MOVE REC-94-TYPE TO REC-94-TYPE-OUT
MOVE REC-94-POLICY-NUMBER TO REC-94-POLICY-NUMBER-OUT
MOVE REC-94-PARISH-CODE TO REC-94-PARISH-CODE-OUT
MOVE REC-94-TERRITORY-CODE TO REC-94-TERRITORY-CODE-OUT
WRITE REPORT-RECORD FROM TRNREC94-OUT.
B900-COUNT-POLICIES.
SET T2-INDEX TO 1.
SEARCH T2-ENTRY
AT END
DISPLAY 'NO POLICIES FOUND.'
WHEN
REC-94-TERRITORY-CODE = T2-TERRITORY-CODE(T2-INDEX)
DD 1 TO T2-TERRITORY-COUNTER(T2-INDEX)
END-SEARCH.
C100-MOVE-COUNTS.
MOVE T2-TERRITORY-CODE(T2-INDEX) TO DET-TERRITORY.
MOVE T2-TERRITORY-COUNTER(T2-INDEX) TO DET-NUMBER-POLICIES.
WRITE PRINT-RECORD FROM DETAIL-LINE.
Run Code Online (Sandbox Code Playgroud)
带有搜索语句的B900版本应该可以工作,但是从A000调用B900,只调用一次.将PERFORM B900语句移至B300,您应该为每个读取的记录收集计数.
此外,T2-TERRITORY-COUNTER用空格初始化.请用零初始化它.根据您的编译器,它可能没有区别,但如果它从零开始,则更容易理解变量的意图.
*更新*
您的更新代码仍有T2-TERRITORY-COUNTER空格.也许以下内容会有所帮助.它基于您的代码,但删除了一些部分以使相关部分更易于查看.下面的代码适用于GNU Cobol(以前的OpenCobol - 请参阅sourceforge.net).
IDENTIFICATION DIVISION.
PROGRAM-ID. COUNT-TERRITORY.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT POLICY-FILE ASSIGN TO 'POLICY.DAT'
FILE STATUS IS POLICY-FILE-STATUS
ORGANIZATION IS LINE SEQUENTIAL.
SELECT REPORT-FILE ASSIGN TO 'POLICY.RPT'
FILE STATUS IS REPORT-FILE-STATUS
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD POLICY-FILE.
01 POLICY-RECORD PIC X(20).
FD REPORT-FILE.
01 REPORT-RECORD PIC X(132).
WORKING-STORAGE SECTION.
01 IS-POLICY-FILE-AT-END PIC XXX VALUE 'NO '.
88 POLICY-FILE-AT-END VALUE 'YES'.
01 POLICY-FILE-STATUS PIC 9(2).
88 POLICY-FILE-OK VALUES 0 10.
* VALUE 00 = SUCCESS
* VALUE 10 = END OF FILE
01 REPORT-FILE-STATUS PIC 9(2).
88 REPORT-FILE-OK VALUES 0 10.
* VALUE 00 = SUCCESS
* VALUE 10 = END OF FILE
01 RECORD-TYPE-94.
05 REC-94-TYPE PIC X(2).
88 INCLUDED-RECORD-TYPE VALUE '94'.
05 REC-94-POLICY-NUMBER PIC X(8).
05 FILLER PIC X(5).
05 REC-94-PARISH-CODE PIC X(3).
05 FILLER PIC X(1).
05 REC-94-TERRITORY-CODE PIC X(1).
01 T2-TERRITORY-COUNT.
05 FILLER PIC X(4) VALUE '1000'.
05 FILLER PIC X(4) VALUE '2000'.
05 FILLER PIC X(4) VALUE '3000'.
05 FILLER PIC X(4) VALUE '4000'.
05 FILLER PIC X(4) VALUE '5000'.
05 FILLER PIC X(4) VALUE '6000'.
05 FILLER PIC X(4) VALUE '7000'.
05 FILLER PIC X(4) VALUE '8000'.
05 FILLER PIC X(4) VALUE '9000'.
01 T2-TERRITORY-TABLE REDEFINES T2-TERRITORY-COUNT.
05 T2-ENTRY OCCURS 9 TIMES
INDEXED BY T2-INDEX.
10 T2-TERRITORY-CODE PIC X.
10 T2-TERRITORY-COUNTER PIC 999.
PROCEDURE DIVISION.
A000-MAINLINE.
PERFORM B000-OPENING-PROCEDURE
PERFORM B200-READ-FILE
PERFORM B300-MAIN-PROCEDURE
UNTIL POLICY-FILE-AT-END
PERFORM C100-WRITE-TERRITORY-COUNTS
PERFORM B100-CLOSING-PROCEDURE
STOP RUN
.
B000-OPENING-PROCEDURE.
OPEN INPUT POLICY-FILE
OPEN OUTPUT REPORT-FILE
.
B100-CLOSING-PROCEDURE.
CLOSE POLICY-FILE
CLOSE REPORT-FILE
.
B200-READ-FILE.
READ POLICY-FILE INTO RECORD-TYPE-94
AT END SET POLICY-FILE-AT-END TO TRUE
PERFORM D100-CHECK-POLICY-FILE-STATUS
.
B300-MAIN-PROCEDURE.
IF INCLUDED-RECORD-TYPE
PERFORM B900-COUNT-POLICIES
ELSE
WRITE REPORT-RECORD FROM RECORD-TYPE-94
PERFORM D200-CHECK-REPORT-FILE-STATUS
END-IF
PERFORM B200-READ-FILE
.
B900-COUNT-POLICIES.
SET T2-INDEX TO 1
SEARCH T2-ENTRY
AT END
DISPLAY 'TERRITORY ' REC-94-TERRITORY-CODE
' UNKNOWN'
WHEN REC-94-TERRITORY-CODE = T2-TERRITORY-CODE (T2-INDEX)
ADD 1 TO T2-TERRITORY-COUNTER (T2-INDEX)
END-SEARCH
.
C100-WRITE-TERRITORY-COUNTS.
MOVE SPACES TO REPORT-RECORD
WRITE REPORT-RECORD
PERFORM D200-CHECK-REPORT-FILE-STATUS
PERFORM VARYING T2-INDEX FROM 1 BY 1
UNTIL T2-INDEX > 9
STRING 'POLICY COUNT FOR TERRITORY '
T2-TERRITORY-CODE (T2-INDEX)
': '
T2-TERRITORY-COUNTER (T2-INDEX)
INTO REPORT-RECORD
WRITE REPORT-RECORD
PERFORM D200-CHECK-REPORT-FILE-STATUS
END-PERFORM
.
D100-CHECK-POLICY-FILE-STATUS.
IF NOT POLICY-FILE-OK
DISPLAY 'ERROR CODE READING POLICY FILE: '
POLICY-FILE-STATUS
END-IF
.
D200-CHECK-REPORT-FILE-STATUS.
IF NOT REPORT-FILE-OK
DISPLAY 'ERROR CODE WRITING REPORT FILE: '
POLICY-FILE-STATUS
END-IF
.
Run Code Online (Sandbox Code Playgroud)