个人不是很喜欢ISPF 3.13
提供的两个Dataset比较的功能,总觉得看得不是很直观。平时还是比较习惯用windows下面的winmerge这个软件来比较。但是有个问题,就是比较的两个程序经常在第72列至80列的行号不一致,导致没法比较。所以这里就来总结一下如何去掉DATASET的中烦人的第72列至80列内容。
方法一:直接在ISPF下面用命令去掉
这是最直接最快的办法。去掉第72列至80列的命令有下面两个:
NUM ON; UNNUMB
C P'^' ’ ’ 73 80 ALL /* Changes all non-space characters to spaces in col 73 to 80*/
方法二:用第三方脚本实现
上面的方法如果是只有少数几个程序,那么手动命令去掉第72列至80列没什么。但是如果你一下子需要对几百个dataset或者同一个PDS下面的所有member去掉第72列至80列,则最好最快的办法是将所有代码通过FTP下载到本地,然后用第三方脚本语言(如VB,Phthon,Ruby,JS等)来解决。
这里是一段自己的Ruby脚本,作用是将C:\prod
文件夹下面的所有程序的第72列至80列内容置空,然后输出到文件夹C:\prod72col
下面。可以看到,用第三方脚本实现批量的任务是很方便的。
```ruby01 def cutto72col(file_in,file_out)
02 file_in=File.new(file_in,‘r’)
03 file_out=File.new(file_out,‘w’)
04 oneline=file_in.gets
05 while(oneline != nil)
06 oneline=oneline.chomp
07 oneline=oneline[0..71]
08 file_out.puts oneline
09 oneline=file_in.gets
10 end
11 end
12
13 path_in=‘C:\prod\’
14 path_out=‘C:prod72col\’
15
16 Dir.foreach(path_in){ |file|
17 if file != ‘.’ && file != ‘..’
18 then
19 file_in = path_in + file
20 cutto72col(file_in,path_out + file)
21 end }
当然,你还可以直接在大机上面用REXX脚本直接对整个PDS操作,移去该PDS下所有member的第72列至80列内容。这里也附上我的REXX脚本,作用是将**`IBMUSER.TEST.PRGM`**这个PDS下面所有的member的第72列至第80列的行号都去掉:
```ruby
/***********************REXX******************************************/
/*Loop PDS to remove whatever between col72 to col80 for each member */
/**********************************************************************/
/* Trace i */
pdsname = 'TEST.PRGM' /*Check if pds is exsited */
if sysdsn(pdsname)<> "OK" then
do
say "Error: Specified PDS not found:" pdsname
say "Error: " pdsname " > " sysdsn(pdsname)
say "Press Enter to continue"
pull uresp
exit 8
end
call outtrap "mbrs." /*call outtrap to capture LISTD output */
"LISTD" pdsname "MEMBERS" /*List member list*/
call outtrap "off" /*Turn off outtrap*/
do i=1 to mbrs.0
/*SAY "mbrs." !! i !! ": " !! mbrs.i */
if mbrs.i = "--MEMBERS--" then
do
leave
end
end
/*start to loop on each member*/
i = i+1
do j=i to mbrs.0 /*mbrs.0 is the total line num of LISTD */
/*SAY "mbrs." !! j !! ": " !! mbrs.j */
parse value mbrs.j with mem /*split mbrs.j*/
mem =strip(mem) /*remove leading and trailing character*/
pds = 'IBMUSER.TEST.PRGM'
mpds = pds !!'(' !! mem !! ')'
"ISPEXEC EDIT DATASET('"mpds"') MACRO(MACRO01)"
end
这是上面主Rexx程序调用的MACRO01:
/*****************************REXX***********************************/
ADDRESS ISPEXEC
"ISREDIT MACRO"
"ISREDIT RES"
"ISREDIT NUM ON"
"ISREDIT UNNUM"
"ISREDIT SAVE"
"ISREDIT END"
Comments !