2012-02-07 35 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

相关问题