Оператор COBOL ADD не использует правильное поле из записи? - PullRequest
0 голосов
/ 07 февраля 2012

Так что я пишу эту программу для класса, и я верю, что я правильно понял.Но я не могу проверить это, потому что я ничего не могу сделать с одним из моих полей из входной записи.Мне нужно добавить его в разные позиции в массиве, но так как он использует неправильное поле, я получаю ошибку «недопустимый символ в числовом поле».У меня тоже правильные предложения входной записи PIC.Входной файл закодирован:

FD SALES-AMT-FILE-IN.
01 SA-SALESMAN-NUM-IN                  PIC 99.
01                                     PIC X        VALUE SPACE.
01 MONTH-NUM-IN                        PIC 9.
01                                     PIC X        VALUE SPACE.
01 SALES-AMT-IN                        PIC 9(5).

SALES-AMT-FILE-IN выложен точно так же, как я проверял его несколько раз и проверял каждую запись.Часть кода, в которой я получаю сообщение об ошибке:

440-READ-SALES-AMT-FILE.
    MOVE 'YES' TO ARE-THERE-MORE-RECORDS

    PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO' 
       READ SALESAMT-FILE-IN
           AT END
               MOVE 'NO' TO ARE-THERE-MORE-RECORDS
           NOT AT END
              DISPLAY SALES-AMT-IN *I coded this in to check what was in SALES-AMT-IN
              ADD SALES-AMT-IN TO A-AMT (MONTH-NUM-IN, SA-SALESMAN-NUM-IN)
       END-READ
    END-PERFORM.

Первая запись входного файла выглядит следующим образом:

30 1 17960

Оператор отображения дает мне:

30 1

Я не могу понять, почему туда поступают неправильные данные, когда я правильно определил PIC.Может ли кто-нибудь увидеть, что я делаю не так.Я выложу весь код, если это необходимо.

WORKING-STORAGE SECTION.                                   
01 ARE-THERE-MORE-RECORDS        PIC X(3)   VALUE 'YES'.   
01 PAGE-CTR                      PIC 99     VALUE ZERO.    
01 NUMBER-OF-LINES               PIC 99     VALUE ZERO.    
01 QTR-NUM                       PIC 9.                    
01 NAME-SUB                      PIC 9(3)   VALUE 1.       
01 NUM-SUB                       PIC 9(3)   VALUE 1.       
01 SALESMAN-NUM                  PIC 999.                  
01 SALESMAN-TOTAL                PIC 9(6).                 

01 WS-DATE.                                                
    05 RUN-YEAR                  PIC XX.                   
    05 RUN-MONTH                 PIC XX.                   
    05 RUN-DAY                   PIC XX.                   

01 HEADING-LINE-1.                                         
    05                           PIC X(17)  VALUE SPACES.  
    05                           PIC X(35)                 
        VALUE 'SALES AMOUNTS BY SALESMAN AND MONTH'.       
    05                           PIC X(6)   VALUE SPACES.  
    05 HL-DATE.                                            
        10  MONTH-HL             PIC XX.                   
        10                       PIC X      VALUE '/'.     
        10  DAY-HL               PIC XX.                   
        10                       PIC X      VALUE '/'.     
        10  YEAR-HL              PIC XX.                   
    05                           PIC X(3)   VALUE SPACES.  
    05                           PIC X(5)   VALUE 'PAGE'.  
    05  PAGE-NUMBER-HL           PIC Z9.                   

01 HEADING-LINE-2.                                         
    05                           PIC X(29)                 
        VALUE 'NUM  NAME'.                                 
    05 THREE-MONTH-NAMES.                                  
        10 MONTH-1-HL            PIC X(11).                
        10 MONTH-2-HL            PIC X(11).                
        10 MONTH-3-HL            PIC X(11).                
    05                           PIC X(5)   VALUE 'TOTAL'. 

01 DETAIL-LINE.                                            
    05 SALESMAN-NUMBER-DL        PIC ZZZ.                  
    05                           PIC XX     VALUE SPACES.  
    05 SALESMAN-NAME-DL          PIC X(20).                
    05 MONTH-1-AMT-DL            PIC ZZZ,ZZZ.              
    05                           PIC X(4)   VALUE SPACES.  
    05 MONTH-2-AMT-DL            PIC ZZZ,ZZZ.              
    05                           PIC X(4)   VALUE SPACES.  
    05 MONTH-3-AMT-DL            PIC ZZZ,ZZZ.              
    05                           PIC XX     VALUE SPACES.  
    05 AMOUNT-TOTAL-DL           PIC Z,ZZZ,ZZZ.            

01 SALESMAN-TABLE                           VALUE ZEROS.   
    05 ENTRIES OCCURS 99 TIMES INDEXED BY X1.              
        10 T-SALESMAN-NUM        PIC 99.                   
        10 T-SALESMAN-NAME       PIC X(20).                

01 SALES-ARRAY.                                            
    05 A-SALESMAN-NUM  OCCURS 99.                          
        10 A-MONTH     OCCURS 3.                           
            15 A-AMT             PIC 9(6)   VALUE ZEROS.   

Ответы [ 3 ]

7 голосов
/ 08 февраля 2012

Мне кажется, проблема в том, что все ваши поля определены на уровне 01.

Попробуйте создать его в такой структуре.

FD SALES-AMT-FILE-IN.
01 SALES-RECORD
  02 SA-SALESMAN-NUM-IN                  PIC 99.
  02                                     PIC X        VALUE SPACE.
  02 MONTH-NUM-IN                        PIC 9.
  02                                     PIC X        VALUE SPACE.
  02 SALES-AMT-IN                        PIC 9(5).
2 голосов
/ 08 февраля 2012

Ваше описание файла называется SALES-AMT-FILE-IN, а вы READ SALESAMT-FILE-IN. Не могу увидеть остальную часть кода, но это не выглядит правильно.

1 голос
/ 08 февраля 2012

Исходя из всего, что вы показали, у вас должны быть неверные данные. Например, ваше «1» - это «l» (L) или «0» - это «O».

...