【发布时间】:2014-03-17 17:49:01
【问题描述】:
我正在更改定义为 7500 字节的文件中的三个值。我曾经将所有文件定义放在我的文件之后,以便我可以更好地看到它。但由于我在 COBOL 中提升了一个级别,我只想让所有内容都成为填充物,然后让我需要访问的四个字段可见。
我在运行 JCL 时不断收到 sB37 错误。我的输出文件也被定义为 7500 字节。我查看了编译列表,它在正确的位置显示了我的所有字段。
我查看了我的输出文件,似乎只写入了 28,000 条记录,前十条看起来有一些垃圾信息。
我无法列出公司规则的整个程序,但我将如何解决 sB37 错误。
问题:如何修复 sB37 错误?
代码:
FD OUTPUT-FILE
RECORD VARYING FROM 2900 TO 7500
RECORDING MODE IS V
BLOCK CONTAINS 0.
01 O-PROVIDER-RECORD.
05 FILLER PIC X(149).
05 END-DTE PIC X(8).
05 CANCEL PIC X(2).
05 FILLER PIC X(1133).
05 LAST-ACTIVITY-DTE PIC X(8).
05 FILLER PIC X(1598).
05 GROUP-CTR PIC S999 COMP-3.
05 FILLER PIC X(4600).
JCL:
//STEP2 EXEC PGM=programnamehere
//STEPLIB DD DSN=SW89.DEBUG.programnamehere,DISP=SHR
//SYSOUT DD SYSOUT=1
//SYSDBOUT DD SYSOUT=1
//SYSOUC DD SYSOUT=2
//SYSPRINT DD SYSOUT=1
//SYSUDUMP DD SYSOUT=1
//INPUT1 DD DSN=MainFile.B01(+0),DISP=SHR,BUFNO=30
//INPUT2 DD DSN=CDP.PARMLIB(SW00T111),DISP=SHR
//OUTPUT1 DD DSN=SW89.DEBUG.OUTPUTFILE,DISP=(NEW,CATLG),
// DCB=TS20.VB7504.MODEL,MGMTCLAS=TMM,
// SPACE=(CYL,(100,10),RLSE)
//PRTOUTA DD SYSOUT=3,DCB=(BLKSIZE=0,LRECL=133,RECFM=FBM)
//*
文件的最后部分:
05 AREA.
10 IND PIC X.
10 CTR PIC S999 COMP-3.
10 P-GROUP-INFO OCCURS 200 TIMES DEPENDING ON CTR.
15 P-NO PIC 9(7).
15 P-START-DTE.
20 PSTART-CC PIC 99.
20 P-START-DATE.
25 P-START-YY PIC 99.
25 P-START-MM PIC 99.
25 P-START-DD PIC 99.
15 P-STOP-DTE.
20 P-STOP-CC PIC 99.
20 P-STOP-DATE.
25 YY PIC 99.
25 MM PIC 99.
25 DD PIC 99.
当我去检查我的匹配项时,我发现我的 write 语句在我的所有常规文件行之间插入了一个空行。这里应该发生的唯一想法是在 o-provider-record 中更改了三个值,然后将其写回文件。每隔一行不应有包含此新信息的空白行。
代码:
CHECK-MATCH.
PERFORM VARYING SUB FROM 1 BY 1 UNTIL SUB > TABLECOUNTER
IF P-PROVIDER >= TRIG-PROV-FROM(SUB) AND
P-PROVIDER <= TRIG-PROV-THRU(SUB) THEN
IF WS-CURRENT-DATE < P-END-DTE THEN
IF P-YTD-TOTAL-PD = 0 AND
P-PYR-TOTAL-PD = 0 AND
P-PYR2-TOTAL-PD = 0 AND
P-PYR3-TOTAL-PD = 0 AND
P-PYR4-TOTAL-PD = 0 THEN
IF P-NON-BILL-IND NOT EQUAL 'Y'
PERFORM VARYING TAB FROM 1 BY 1 UNTIL TAB > 5
IF P-TAXONOMY-CD(TAB) = TRIG-TAXONOMY(SUB) THEN
ADD 1 TO T-REC-FOUND
ADD 1 TO T-REC-UPDATED
MOVE 'ZZ' TO O-CANCEL
MOVE '93939393' TO O-END-DTE
MOVE '93939393' TO O-LAST-ACTIVITY-DTE
PERFORM LOAD-PRINT-REPORT THRU X-LPR
PERFORM PRINT-REPORT THRU X-PR
PERFORM ERASE-REPORT THRU X-ER
END-IF
END-PERFORM
END-IF
END-IF
END-IF
END-IF
ADD 1 TO T-REC-WRITTEN
WRITE O-PROVIDER-RECORD END-WRITE
END-PERFORM.
X-CHECK-MATCH. EXIT.
【问题讨论】: