COBOL ADD 语句未使用记录中的正确字段?

发布于 2025-01-03 08:58:27 字数 4420 浏览 3 评论 0原文

所以我正在为课堂编写这个程序,我相信我是对的。但我无法测试它,因为我无法对输入记录中的字段之一执行任何操作。我需要将它添加到数组中的不同位置,但由于它使用了错误的字段,我收到“数字字段中的无效字符”错误。我的输入记录 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.   

So I'm writing this program for class and I believe I have it right. But I can't test it because I can't do anything with one of my fields from an input record. I need to add it to different positions in an array but since it is using the wrong field I get an "invalid character in numeric field" error. I have the input record PIC clauses correct too. The input file is coded:

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 is laid out exactly like that I've checked it multiple times and checked each record. The section of code I'm getting the error in is:

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.

The first record of the input file is like this:

30 1 17960

The display statement is giving me:

30 1

I can't figure out why the wrong data is going in there when I have the PIC correctly defined. Can anyone see what I'm doing wrong. I'll post the entire code if needed.

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.   

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

强辩 2025-01-10 08:58:27

我认为问题在于您的所有字段都定义为级别 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).

I think the problem is that all of your fields are defined a level 01.

Try creating it in a structure like this.

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).
云胡 2025-01-10 08:58:27

当您READ SALESAMT-FILE-IN 时,您的文件描述名为SALES-AMT-FILE-IN。看不到其余的代码,但这看起来不正确。

Your File Description is named SALES-AMT-FILE-IN while you READ SALESAMT-FILE-IN. Can't see the rest of the code, but that just doesn't look correct.

情何以堪。 2025-01-10 08:58:27

根据您所显示的所有内容,您的数据一定有问题。例如,“1”是“l”(L),“0”是“O”。

Based on everything you've shown, you must have bad data. For example, your "1" is an "l" (L) or your "0" is an "O".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文