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

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为问题在于您的所有字段都定义为级别 01。
尝试在这样的结构中创建它。
I think the problem is that all of your fields are defined a level 01.
Try creating it in a structure like this.
当您
READ SALESAMT-FILE-IN
时,您的文件描述名为SALES-AMT-FILE-IN
。看不到其余的代码,但这看起来不正确。Your File Description is named
SALES-AMT-FILE-IN
while youREAD SALESAMT-FILE-IN
. Can't see the rest of the code, but that just doesn't look correct.根据您所显示的所有内容,您的数据一定有问题。例如,“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".