Cobol 如何修复RPT文件中字段的重复?

Cobol 如何修复RPT文件中字段的重复?,cobol,Cobol,该程序将读取SEQ文件,并通过不同的验证获取数据,如果数据不符合其中一个验证,则错误消息将移至FIELD-NAME,FIELD-VALUE为错误字段 处理完所有数据后,所有事务都将用于创建RPT文件 问题:在查看RPT文件时,一个奇怪的问题是错误字段名/错误字段值在传递条目后不断重复相同的错误。我相信问题出在300、310、320、330、340、350段 零件号验证要求第01-05栏必须是数字,第06栏必须是大写,第07-08栏必须是范围为01-68或78-99的数字 允许数量验证要求前导

该程序将读取SEQ文件,并通过不同的验证获取数据,如果数据不符合其中一个验证,则错误消息将移至FIELD-NAME,FIELD-VALUE为错误字段

处理完所有数据后,所有事务都将用于创建RPT文件

问题:在查看RPT文件时,一个奇怪的问题是错误字段名/错误字段值在传递条目后不断重复相同的错误。我相信问题出在300、310、320、330、340、350段

  • 零件号验证要求第01-05栏必须是数字,第06栏必须是大写,第07-08栏必须是范围为01-68或78-99的数字

  • 允许数量验证要求前导空格(可以是所有空格),如果不是所有空格都必须是前导空格后的数字,则允许零值,值超过20000是错误的

  • 日期验证要求月值必须为01-12,日值必须为01-31

  • 费用编号验证要求不能为空,必须左对齐(无前导空格),并且不允许超过一个破折号(连字符)

  • 初始验证要求必须为字母(大写或小写OK)

  • 交易代码验证要求必须是REC、ISS、AJ+或AJ-

如果你用附加的SEQ运行我的附加程序,你的RPT将与我的一样

下面是所需的输出。(第1页)

序号:

代码:

如果你需要更多的澄清,请提问


谢谢。

重复
字段名
字段值
的内容的原因是没有采取任何措施来更改这些字段的内容。至少,在写入报告行后,有必要将空格移到这些字段中。在
200-PROCESS-ONE-RECORD
中,在写入记录后插入
MOVE
语句,如下所示

       MOVE DETAIL-LINE TO INVENTORY-TRANS-RECORD-OUT-2
       WRITE INVENTORY-TRANS-RECORD-OUT-2
       MOVE SPACES TO FIELD-NAME FIELD-VALUE

这回答了你的问题吗?不,这就是我问另一个问题的原因。如果你愿意,你能帮我解决上面提到的验证问题吗。
   IDENTIFICATION DIVISION.
   PROGRAM-ID. INVTRAN.
  * Tate
  ***************************************************************
  * This program reads a fie of inventory transaction,
  * validates the data, prints a report showing all transactions
  * (with errors indicated), and writes a data file of
  * all transactions without errors.
  ***************************************************************
   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   
       SELECT INVENTORY-TRANS-FILE-IN
           ASSIGN TO 'INVTRAN.SEQ'
           ORGANIZATION IS LINE SEQUENTIAL.
           
  *    SELECT INVENTORY-TRANS-FILE-OUT
  *        ASSIGN TO 'INVTRAN.OUT'
  *        ORGANIZATION IS LINE SEQUENTIAL.
           
       SELECT INVENTORY-TRANS-FILE-OUT-2
           ASSIGN TO 'INVTRAN.RPT'
           ORGANIZATION IS LINE SEQUENTIAL.
           
   DATA DIVISION.
   FILE SECTION.
   
   FD INVENTORY-TRANS-FILE-IN.
   01 INVENTORY-TRANS-RECORD-IN.
       05 PART-NUMBER-IN.
           10 PART-NUMERIC-1-IN    PIC X(5).
           10 PART-ALPHABETIC-IN   PIC X.
           10 PART-NUMERIC-2-IN    PIC XX.
               88 VALID-PART-NUMERIC-2 VALUE '01' THRU '68' '78' THRU '99'.
       05 QUANTITY-IN.
           10 QUANTITY-9-IN        PIC 9(5).
       05 DATE-IN.
           10 MONTH-IN             PIC XX.
               88 VALID-MONTH-IN  VALUE '01' THRU '12'.
           10 DAY-IN               PIC XX.
               88 VALID-DAY-IN    VALUE '01' THRU '31'.
       05 CHARGE-NUMBER-IN         PIC X(10).
       05 INITIALS-IN.
           10 INITIALS-1-IN        PIC X.
           10 INITIALS-2-IN        PIC X.
       05 TRANS-CODE-IN            PIC X(3).
           88 VALID-TRANS-CODE-IN VALUE 'REC' 'ISS' 'AJ+' 'AJ-'.
   
   FD INVENTORY-TRANS-FILE-OUT-2.
   01 INVENTORY-TRANS-RECORD-OUT-2 PIC X(80).
   
   WORKING-STORAGE SECTION.
   01 WS-FIRST-TIME-THRU           PIC X(3)    VALUE 'YES'.
   01 LINES-PRINTED                PIC 99      VALUE 99.
   01 PAGE-NUMBER                  PIC 99      VALUE ZERO.
   01 RECORDS-ERROR-SWITCH         PIC X(3).
   01 FIELD-ERROR-SWITCH           PIC X(3).
   01 WS-TOTAL                     PIC 99      VALUE ZERO.
   01 WS-ERROR                     PIC 99      VALUE ZERO.
   01 WS-GOOD                      PIC 99      VALUE ZERO.
   01 WS-QUANTITY                  PIC 9(4)    VALUE ZERO.
   01 TOTAL-ERROR-COUNT            PIC 9(3)    VALUE ZERO.
   01 TOTAL-GOOD-COUNT             PIC 9(3)    VALUE ZERO.
   01 TOTAL-GOOD-QUANTITY          PIC 9(5)    VALUE ZERO.
   
   01 WS-CURRENT-DATE-DATA.
       05 WS-CURRENT-DATE.
           10 RUN-YEAR             PIC XX.
           10 RUN-MONTH            PIC XX.
           10 RUN-DAY              PIC XX.
   
   01 HEADING-LINE-1.
       05                          PIC X(17)   VALUE SPACES.
       05                          PIC X(35)   VALUE 'INVENTORY TRANSACTIONS AUDIT TRAIL'.
       05                          PIC X(8)    VALUE SPACES.
       05 HL-1-DATE.
           10 MONTH-1              PIC XX.
           10                      PIC X       VALUE '/'.
           10 DAY-1                PIC XX.
           10                      PIC X       VALUE '/'.
           10 YEAR-1               PIC XX.
       05                          PIC X(3)    VALUE SPACES.
       05                          PIC X(5)    VALUE 'PAGE'.
       05 HL-1-PAGE-NUMBER         PIC Z9.
       
   01 HEADING-LINE-2.
       05                          PIC X(10)   VALUE 'PART NO'.
       05                          PIC X(5)    VALUE 'QUAN'.
       05                          PIC X(5)    VALUE 'DATE'.
       05                          PIC X(11)   VALUE 'CHARGE NO'.
       05                          PIC X(3)    VALUE 'IN'.
       05                          PIC X(4)    VALUE 'TRN'.
       05                          PIC X(3)    VALUE SPACES.
       05                          PIC X(20)   VALUE 'ERROR FIELD NAME'.
       05                          PIC X(17)   VALUE 'ERROR FIELD VALUE'.
   01 DETAIL-LINE.
       05 PART-NUMBER              PIC X(8).
       05                          PIC X       VALUE SPACE.
       05 QUANTITY                 PIC X(5).
       05                          PIC X       VALUE SPACE.
       05 DATE-X                   PIC X(4).
       05                          PIC X       VALUE SPACE.
       05 CHARGE-NUMBER            PIC X(10).
       05                          PIC X       VALUE SPACE.
       05 INITIALS                 PIC XX.
       05                          PIC X       VALUE SPACE.
       05 TRANS-CODE               PIC X(3).
       05                          PIC X(4)    VALUE SPACES.
       05 FIELD-NAME               PIC X(18).
       05                          PIC XX      VALUE SPACES.
       05 FIELD-VALUE              PIC X(10).
       
   01 TRANSACTIONS.
       05                          PIC X(41)   VALUE 'Total Transactions:'.
       05 T-1                      PIC 99.
       
   01 ERROR-TRANSACTIONS.
       05                          PIC X(41)   VALUE 'Total Error Transactions:'.
       05 T-2                      PIC 99.
       
   01 GOOD-TRANSACTIONS.
       05                          PIC X(41)   VALUE 'Total Good Transactions:'.
       05 T-3                      PIC 99.
       
   01 QUANTITY-TOTAL.
       05                          PIC X(41)   VALUE 'Good Transactions Quantity Total:'.
       05 Q-4                      PIC 9,999.
       
   PROCEDURE DIVISION.
   100-MAIN.
       OPEN INPUT INVENTORY-TRANS-FILE-IN
       OPEN OUTPUT INVENTORY-TRANS-FILE-OUT-2
       
       ACCEPT WS-CURRENT-DATE FROM DATE
       MOVE RUN-MONTH TO MONTH-1
       MOVE RUN-DAY TO DAY-1
       MOVE RUN-YEAR TO YEAR-1
       PERFORM 150-WRITE-HEADINGS
       
       PERFORM UNTIL RECORDS-ERROR-SWITCH = 'YES'
           READ INVENTORY-TRANS-FILE-IN
               AT END
                   PERFORM 500-TRANSACTIONS
                   PERFORM 510-ERROR-TRANSACTIONS
                   PERFORM 520-GOOD-TRANSACTIONS
                   PERFORM 530-QUANTITY
                   MOVE 'YES' TO RECORDS-ERROR-SWITCH
               NOT AT END
                   PERFORM 200-PROCESS-ONE-RECORD
          END-READ
      END-PERFORM
      
      CLOSE INVENTORY-TRANS-FILE-IN
      CLOSE INVENTORY-TRANS-FILE-OUT-2
      STOP RUN.
   
   150-WRITE-HEADINGS.
       ADD 1 TO PAGE-NUMBER
       MOVE PAGE-NUMBER TO HL-1-PAGE-NUMBER
       MOVE HEADING-LINE-1 TO INVENTORY-TRANS-RECORD-OUT-2
       
       IF WS-FIRST-TIME-THRU = 'YES'
           WRITE INVENTORY-TRANS-RECORD-OUT-2
           MOVE 'NO' TO WS-FIRST-TIME-THRU
       ELSE
           WRITE INVENTORY-TRANS-RECORD-OUT-2 AFTER ADVANCING PAGE
       END-IF
       
       MOVE HEADING-LINE-2 TO INVENTORY-TRANS-RECORD-OUT-2
       WRITE INVENTORY-TRANS-RECORD-OUT-2
       MOVE 1 TO LINES-PRINTED.
   
   200-PROCESS-ONE-RECORD.
       IF LINES-PRINTED > 54
           PERFORM 150-WRITE-HEADINGS
       END-IF
       
       MOVE 'NO' TO RECORDS-ERROR-SWITCH
       PERFORM 300-VALIDATE-PART-NUMBER
       PERFORM 310-VALIDATE-QUANTITY
       PERFORM 320-VALIDATE-DATE
       PERFORM 330-VALIDATE-CHARGE-NUMBER
       PERFORM 340-VALIDATE-INITIALS
       PERFORM 350-VALIDATE-TRANSACTION-CODE
       
       MOVE PART-NUMBER-IN TO PART-NUMBER
       MOVE QUANTITY-IN TO QUANTITY
       MOVE DATE-IN TO DATE-X
       MOVE CHARGE-NUMBER-IN TO CHARGE-NUMBER
       MOVE INITIALS-IN TO INITIALS
       MOVE TRANS-CODE-IN TO TRANS-CODE
       
       
       IF RECORDS-ERROR-SWITCH = 'NO'
           ADD 1 TO TOTAL-GOOD-COUNT
           ADD 1 TO TOTAL-GOOD-QUANTITY
           MOVE DETAIL-LINE TO INVENTORY-TRANS-RECORD-OUT-2
           WRITE INVENTORY-TRANS-RECORD-OUT-2
       ELSE
           ADD 1 TO TOTAL-ERROR-COUNT
       END-IF.
    
   300-VALIDATE-PART-NUMBER.
       IF NOT VALID-PART-NUMERIC-2
           MOVE 'Part Number' TO FIELD-NAME
           MOVE PART-NUMBER-IN TO FIELD-VALUE
       END-IF.
       
   310-VALIDATE-QUANTITY.
       IF FUNCTION NUMVAL (QUANTITY-IN) IS GREATER THAN 20000
           MOVE 'Quantity' TO FIELD-NAME
           MOVE QUANTITY-IN TO FIELD-VALUE
       END-IF.
   
   320-VALIDATE-DATE.
       IF NOT VALID-MONTH-IN
           MOVE 'Date' TO FIELD-NAME
           MOVE DATE-IN TO FIELD-VALUE
       ELSE
           IF NOT VALID-DAY-IN
               MOVE 'Date' TO FIELD-NAME
               MOVE DATE-IN TO FIELD-VALUE
           END-IF
       END-IF.
   
   330-VALIDATE-CHARGE-NUMBER.
       IF CHARGE-NUMBER-IN IS EQUAL TO ' '
           MOVE 'Charge Number' TO FIELD-NAME
           MOVE CHARGE-NUMBER-IN TO FIELD-VALUE
       END-IF.
   
   340-VALIDATE-INITIALS.
       IF ((INITIALS-1-IN IS EQUAL TO ' ') OR (INITIALS-2-IN IS EQUAL TO ' '))
           MOVE 'Initials' TO FIELD-NAME
           MOVE INITIALS-IN TO FIELD-NAME
       END-IF.
   
   350-VALIDATE-TRANSACTION-CODE.
       IF NOT VALID-TRANS-CODE-IN
           MOVE 'Transaction Code' TO FIELD-NAME
           MOVE TRANS-CODE-IN TO FIELD-VALUE
       END-IF.
       
   500-TRANSACTIONS.
   MOVE WS-TOTAL TO TRANSACTIONS
   MOVE T-1 TO INVENTORY-TRANS-RECORD-OUT-2
   WRITE INVENTORY-TRANS-RECORD-OUT-2 AFTER ADVANCING 2 LINES.
   
   510-ERROR-TRANSACTIONS.
   MOVE WS-ERROR TO ERROR-TRANSACTIONS
   MOVE T-2 TO INVENTORY-TRANS-RECORD-OUT-2
   WRITE INVENTORY-TRANS-RECORD-OUT-2 AFTER ADVANCING 2 LINES.
   
   520-GOOD-TRANSACTIONS.
   MOVE WS-GOOD TO GOOD-TRANSACTIONS
   MOVE T-3 TO INVENTORY-TRANS-RECORD-OUT-2
   WRITE INVENTORY-TRANS-RECORD-OUT-2 AFTER ADVANCING 2 LINES.
   
   530-QUANTITY.
   MOVE WS-QUANTITY TO QUANTITY-TOTAL
   MOVE Q-4 TO INVENTORY-TRANS-RECORD-OUT-2
   WRITE INVENTORY-TRANS-RECORD-OUT-2 AFTER ADVANCING 2 LINES.
       MOVE DETAIL-LINE TO INVENTORY-TRANS-RECORD-OUT-2
       WRITE INVENTORY-TRANS-RECORD-OUT-2
       MOVE SPACES TO FIELD-NAME FIELD-VALUE