我有一个顺序数据集,其中有一些按列格式化的数据。假设下面是我的数据集的格式。
Emp_ID Emp_name Emp_addr
---------------------------------
我想从数据集中删除列 Emp_Name。我可以在不编写 COBOL 程序的情况下做到这一点吗?如果我们有任何命令可以这样做,请告诉我。
谢谢和问候, Manasi Kulkarni。
我有一个顺序数据集,其中有一些按列格式化的数据。假设下面是我的数据集的格式。
Emp_ID Emp_name Emp_addr
---------------------------------
我想从数据集中删除列 Emp_Name。我可以在不编写 COBOL 程序的情况下做到这一点吗?如果我们有任何命令可以这样做,请告诉我。
谢谢和问候, Manasi Kulkarni。
您可以使用 SORT 从顺序文件中消除字节。
让我们假设以下格式:
Employee ID Bytes 1 - 10
Employee Name Bytes 11 - 40
Employee Address Bytes 41 - 70
我们想消除员工姓名。我们要复制前 10 个字节,跳过接下来的 30 个字节,然后复制最后 30 个字节。
输入顺序文件为 70 字节,输出顺序文件为 40 字节。
这是执行此任务的 SORT JCL。您需要修改 JCL 以符合大型机商店的标准。
//EXAMP JOB A400,PROGRAMMER
//COPY EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=SMF.DATA,DISP=SHR
//SORTOUT DD DSN=SMF.COPY,DISP=(,KEEP),SPACE=(CYL,(2,5))
// UNIT=SYSDA
//SYSIN DD *
OPTION COPY
OUTREC FIELDS=(1,10,41,30)
/*
//
OUTREC 语句表示从字节 1 开始复制 10 个字节,从字节 41 开始复制 30 个字节,总共 40 个字节。
这是 IBM 的DFSORT 手册以获取更多信息。
对于较小数据集的一次性更改——这可能不适合这里——ISPF 编辑器可以做到这一点。只需使用 BNDS 行命令设置左边界,然后使用 'left shift'(' 行命令将数据左移该列的宽度以有效消除它。
此外,如果您想要更多控制权,您始终可以使用两个 EXEXCIO 命令编写一个快速 REXX 脚本来读取文件并在第二个命令中只写入您想要的部分。
您还可以使用 IEBGENER 重新格式化数据,如下所示:
//FORMAT EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD *
EMP_ID EMP_NAME EMP_ADDR
---------------------------------
120 FIRST NEW ROAD
130 SECOND OLD ROAD
/*
//SYSUT2 DD SYSOUT=*
//SYSIN DD *
GENERATE MAXFLDS=99,MAXLITS=99
RECORD FIELD=(10,1,,1),
FIELD=(30,24,,11)
/*
//
有关 IEBGENER 命令语法的更多详细信息,请参见此处。