2012-02-07 63 views
0

所以我正在寫這個課程,我相信我是對的。但我無法測試它,因爲我無法對輸入記錄中的某個字段進行任何操作。我需要將它添加到數組中的不同位置,但由於它使用了錯誤的字段,所以我得到一個「數字字段中的無效字符」錯誤。我也有輸入記錄PIC子句。輸入文件編碼:COBOL ADD語句不使用記錄中的正確字段?

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). 

銷售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. 

回答

7

我認爲這個問題是所有的字段都限定的水平高度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). 
+0

就是這樣。我想我明白爲什麼它不會像我這樣做。謝謝! – Shane 2012-02-08 01:26:35

+2

我會用'05'而不是'02'。這是一個老程序員的竅門 - 如果出於某種原因,您需要添加組項定義,那麼您可以毫不費力地完成(除非您是縮進的堅持者)。 這是衝卡日子的倒退。 – zarchasmpgmr 2012-02-08 16:30:43

+0

我同意。我爲一個地方工作,每個級別都使用奇數。我們還將這些空格填充爲FILLER,而不是將字段名稱留空。 – Logan 2012-02-09 00:24:34

1

根據您顯示的所有內容,您必須具有錯誤的數據。例如,您的「1」是「l」(L),或者您的「0」是「O」。

+0

由於輸入文件的PIC子句,SALES-AMT-IN甚至不應該包含30 1。它應該包含17960,但它不包含。我認爲你在思考同樣的事情,直到我放入陳列條款,並且看到它甚至沒有使用我告訴它的數據。 – Shane 2012-02-07 20:04:02

2

您的文件說明被命名爲SALES-AMT-FILE-IN而您READ SALESAMT-FILE-IN。看不到代碼的其餘部分,但這看起來不正確。

+1

哎呀,這是發佈時的錯字。 – Shane 2012-02-07 23:47:07

相關問題