file - COBOL - 使用相对和动态选项打开顺序数据集时的文件状态 37

标签 file io cobol zos

我正在尝试打开顺序数据集。

我得到文件状态 37,其中 IBM说:

An OPEN statement was attempted on a file that would not support the open mode specified in the OPEN statement. Possible violations are:

  • The EXTEND or OUTPUT phrase was specified but the file would not support write operations.
  • The I-O phrase was specified but the file would not support the input and output operations permitted.
  • The INPUT phrase was specified but the file would not support read operations.

我怀疑第三个,因为我的程序的相关部分是:

  *----------------------
   INPUT-OUTPUT SECTION.
  *----------------------

   FILE-CONTROL.

 *    input file 1
      SELECT INPUT-1-FILE
         ASSIGN TO EXAMPLE
         ORGANIZATION IS RELATIVE
         ACCESS MODE IS DYNAMIC
         RELATIVE KEY IS INPUT-1-ACCESS-KEY
         FILE STATUS IS INPUT-1-FS
         .


  ****************
   DATA DIVISION.
  ****************

  *--------------
   FILE SECTION.
  *--------------

  * fichier 1
   FD INPUT-1-FILE
       .
   01 INPUT-1-LINE.
     05 filler                     PIC X(300).


  *-------------------------
   WORKING-STORAGE SECTION.
  *-------------------------

   77 INPUT-1-ACCESS-KEY           PIC 9(3) comp value 1.

   01 INPUT-1-FS                   PIC 99 value 00.


  *********************
   PROCEDURE DIVISION.
  *********************

       OPEN INPUT INPUT-1-FILE
       DISPLAY INPUT-1-FS

我的 JCL 中的 DD 卡如下所示:

EXAMPLE DD DISP=SHR,DSN=MY.DATASET.NAME

我们使用的是 COBOL v5,所以我检查了 IBMrelevant docs ,但我找不到任何原因导致我的文件无法在输入模式下打开。

以下是我的数据集的特征: ISPF dataset info screen

VSAM listcat 的结果: VSAM listcat result

最佳答案

在您的程序中,组织是相对表示输入文件必须是相对记录数据集( rrds )VSAM文件,可以使用来定义该文件。 IDCAMS DEFINE 命令。可能发生的事情是,如果您打开的文件是一个顺序文件,则获得37个文件状态。有关 IDCAMS DEDINE 的更多信息,请在IBM Redbook中提到。 'Relative record data set '.

您可以将输入文件设为 VSAM 文件,如下所示:

//[YOURID]  JOB ,
// MSGCLASS=S,REGION=0M,COND=(9,LT),NOTIFY=&SYSUID,TIME=(1,1)
//*********************************************************************
//* Create a VSAM
//*********************************************************************
//S1IDCAMS   EXEC  PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
DELETE   ([YOURID].P00695.VSAMRRDS) CLUSTER PURGE
DEFINE CLUSTER (NAME([YOURID].P00695.VSAMRRDS)   -
           NUMBERED                                -
           RECORDSIZE(80 80)                      -
           BUFFERSPACE(2048)                       -
           SHAREOPTIONS(4 3)                       -
           VOLUMES(SYS162))                        -
   DATA    (NAME([YOURID].P00695.VSAMRRDS.DATA) -
           TRACK(1,1)                              -
           CISZ (1024))
/*
//S2REPRO    EXEC  PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//VSAM  DD DISP=SHR,DSN=[YOURID].P00695.VSAMRRDS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
REPRO OUTFILE(VSAM) INFILE(INREC)
/*
//INREC  DD *
XXXXXXX060ALISONALISONALISONALISONALISONALISONALISONALISONAL        ISONALIS
XXXXXXX060ALISONALISONALISONALISONALISONALISONALISONALISONAL        ISONALIS
/*

关于file - COBOL - 使用相对和动态选项打开顺序数据集时的文件状态 37,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53213368/

相关文章:

text - 为什么读取/写入另一个文件的 VB6 文本文件最后一行仅部分打印?

antlr - 将 COBOL AST 转换为 Java 源文件

javascript - 使用 Javascript 下载 HTTP 文件

cobol - cobol 中的 "copy corresponding"是什么,它是如何工作的?

java - 如何在java中解析cobol s9(6)v99格式的数据和从cobol s9(6)v99格式解析数据

c - C中的读/写函数

c - 重定向后如何返回标准输出?

c++ - 从文件加载矩阵

java - 如何在 Java 中处理一个巨大的单行文件

java - 为什么我不能将signed int 转换为unsigned long