0

我有一个顺序数据集,其中有一些按列格式化的数据。假设下面是我的数据集的格式。

Emp_ID    Emp_name     Emp_addr
---------------------------------

我想从数据集中删除列 Emp_Name。我可以在不编写 COBOL 程序的情况下做到这一点吗?如果我们有任何命令可以这样做,请告诉我。

谢谢和问候, Manasi Kulkarni。

4

4 回答 4

6

您可以使用 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 手册以获取更多信息。

于 2010-06-08T08:09:35.297 回答
0

对于较小数据集的一次性更改——这可能不适合这里——ISPF 编辑器可以做到这一点。只需使用 BNDS 行命令设置左边界,然后使用 'left shift'(' 行命令将数据左移该列的宽度以有效消除它。

于 2015-04-28T11:07:13.580 回答
0

此外,如果您想要更多控制权,您始终可以使用两个 EXEXCIO 命令编写一个快速 REXX 脚本来读取文件并在第二个命令中只写入您想要的部分。

于 2014-11-03T13:20:04.370 回答
0

您还可以使用 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 命令语法的更多详细信息,请参见此处。

于 2010-06-11T07:06:49.587 回答