Rah*_*hul 2 cobol file mainframe jcl vsam
Vsam 文件创建 -
//VSAMKSDS JOB CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),PRTY=15,
// NOTIFY=&SYSUID
//STEP10 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER( -
NAME(RAHUL.KSDS.FILE) -
INDEXED -
KEYS(05 1) -
RECSZ(35 35) -
FREESPACE(10 20) -
TRACKS(50 30) -
CISZ(8192) -
VOLUME(ZASYS1))
/*
Run Code Online (Sandbox Code Playgroud)
记录在文件中——
RBA Len 1<==5>..10....5...20....5...30....5..
0 35 12543rajjd jdhdjd 9876553
35 35 53221dfdffd jhsfhd 9778785
Run Code Online (Sandbox Code Playgroud)
出现错误 -
KSDSFL 打开状态 39
KSDSFL 关闭状态 42
我的 Cobol 程序:-
IDENTIFICATION DIVISION.
PROGRAM-ID. KSDSPROG.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT KSDSFL ASSIGN TO INFLDD
ORGANIZATION IS INDEXED
ACCESS MODE IS RANDOM
RECORD KEY IS EMP-ID
FILE STATUS IS RTCODE.
DATA DIVISION.
FILE SECTION.
FD KSDSFL.
01 KSDSFL-REC.
05 EMP-ID PIC X(05).
05 EMP-DESC PIC X(30).
WORKING-STORAGE SECTION.
01 RTCODE PIC X(02).
01 REC-OUT PIC X(35).
PROCEDURE DIVISION.
OPEN INPUT KSDSFL.
DISPLAY 'KSDSFL OPEN STATUS ' RTCODE.
MOVE '12345' TO EMP-ID
READ KSDSFL RECORD INTO REC-OUT
KEY IS EMP-ID
INVALID KEY
DISPLAY 'KEY IS INVALID'
NOT INVALID KEY
DISPLAY 'KEY IS VALID'
END-READ.
CLOSE KSDSFL.
DISPLAY 'KSDSFL CLOSE STATUS ' RTCODE.
STOP RUN.
Run Code Online (Sandbox Code Playgroud)
不知道为什么我会遇到数据不匹配问题。程序编译成功,但运行时获取文件状态 39。所有字段记录均匹配,但问题仍未解决。请帮我解决它。
您提供的数据显示记录长度为37。应该是35。
我修改了记录的问题部分以使其编码,因此有固定宽度的字体,因为它让我困惑记录的排列位置。如果我犯了错误,请纠正。
FD
( ) 部分中的密钥EMP-ID
从偏移量 0 开始;它应该偏移1。
FILE SECTION.
FD KSDSFL.
01 KSDSFL-REC.
05 EMP-ID PIC X(05).
05 EMP-DESC PIC X(30).
Run Code Online (Sandbox Code Playgroud)
改成
FILE SECTION.
FD KSDSFL.
01 KSDSFL-REC.
05 FILLER PIC X.
05 EMP-ID PIC X(05).
05 EMP-DESC PIC X(29).
Run Code Online (Sandbox Code Playgroud)