IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

如何使用REXX重命名VSAM或OSAM文件列表?


IBM大型机论坛 -> 清单& REXX
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
第75章

活跃用户


已加入:2014年6月9日
帖子:119
位置:CT

发布发表:2015年6月3日星期三晚上11:25
引用回复

嗨,专家们,

我想用rexx批量重命名VSAM和OSAM文件列表。但是我对此有两个问题。

1.如何使用rexx查找系统中的所有VSAM或OSAM数据集?
例如如何获取以#IMSS1开头的所有数据集的列表。**
码:
#IMSS1                   
#IMSS1.GC.GCACPCD1       
#IMSS1.GC.GCACPCD1.DATA 
#IMSS1.GC.GCACPCD3       
#IMSS1.GC.GCACPCD3.DATA 
#IMSS1.GC.GCACPCD5       
#IMSS1.GC.GCACPCD5.DATA 
#IMSS1.GC.GCACPCD7       
#IMSS1.GC.GCACPCD7.DATA 
#IMSS1.GC.GCACPCD9       
#IMSS1.GC.GCACPCD9.DATA 
#IMSS1.GC.GCACPCX1       
#IMSS1.GC.GCACPCX1.DATA 
#IMSS1.GC.GCACPCX1.INDEX 
等等

2.步骤1之后,如何重命名,我知道使用重命名的pds,但是VSAM和OSAM的命令是什么?

谢谢
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:2015年6月4日,星期四10:04 pm
引用回复

您是否参考过AMS手册?你知道LISTCAT吗?您知道如何使用IDCAMS重命名数据集吗?
回到顶部
查看用户资料 发送私信
第75章

活跃用户


已加入:2014年6月9日
帖子:119
位置:CT

发布发表于:2015年6月4日,星期四10:24 pm
引用回复

你好

谢谢您的回答,我想通了,它有效。
这是代码:

码:
/ * rexx * /                                 
  THEPDS = "' #IMSS1'"         / *数据集要更改* /
  X = OUTTRAP('ML.')                         
  "LISTCAT LEVEL("THEPDS")"                 
  X = OUTTRAP('OFF')                         
  A=0                                       
  MEMBER.=0                                 
  DO N = 1 TO ML.0                           
   PARSE VAR ML.N MEMBER.N                 
   IF SUBSTR(MEMBER.N,1,7)='NONVSAM'|,       
      SUBSTR(MEMBER.N,1,5)='INDEX'|,         
      SUBSTR(MEMBER.N,1,7)='CLUSTER'|,       
      SUBSTR(MEMBER.N,1,4)='DATA'   THEN DO 
     OUTPUT.N=SUBSTR(MEMBER.N,17,50)         
     A=A+1                                   
     OUTPUT.A=STRIP(OUTPUT.N)               
   END                                       
结束                                                                   
我= 1到A                                                           
OLDNAME ='#IMSS1'       / *旧数据集名称* /                                                 
TMPTXT1 ='#IMSS2'       / *新数据集名称 更改为您想要的任何名称* /                                             
新闻 =输出                                                     
做POS(oldname,NEWSTR.I) > 0                                     
   NEWSTR.I = SUBSTR(NEWSTR.I, 1 , POS(oldname,NEWSTR.I)-1) ||,         
   TMPTXT1 || SUBSTR(NEWSTR.I, POS(oldname,NEWSTR.I) + LENGTH(oldname))
结束                                                                     
"ALTER '"OUTPUT.I"'",                                                   
     "NEWNAME('"NEWSTR.I"')"                                           
结束                                                           
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表:星期五六月05,2015 3:23下午
引用回复

大。现在,您要做的就是修改程序,以使其可以使用THEPDS(需要更好的名称!)作为可在命令行上指定的参数。
回到顶部
查看用户资料 发送私信
皮特·威尔逊

活跃用户


已加入:2009年12月31日
帖子:490
地点:伦敦

发布发表:2015年7月15日,星期三,9:13 pm
引用回复

您还需要照顾您要重命名的VSAM文件的任何``关联''。即任何与AlX或PATH相关的文件。如果要确定是否使用掩码,则需要在LISTCAT中包括CDILVL参数(ZOS1.13及更高版本)。或者在执行程序上使用带有SPHERE和PARM ='TYPRUN = NORUN'的DFDSS DUMP之类的东西

对于NONVSAM,您必须处理可能指向要重命名的文件的任何ALIAS(通常是PDS,但严格来说)。

还应考虑通过将数据集重命名为适当的位置,它们可能实际上不在这些名称的预期存储池之外。有时,带有RENAMEU的DFDSS COPY会更好,因为它会基于DFSMS例程将文件重命名并将文件移动到正确的池中。
回到顶部
查看用户资料 发送私信
马索

REXX主持人


已加入:2006年3月13日
帖子:1348
地点:以色列

发布发表于:2015年7月16日,星期四,7:17 pm
引用回复

因为您努力编写自己的代码并将其发布在此处,所以我也将付出努力。 icon_smile.gif

关于您的代码的几点评论:
1.在两个循环中,在不必要时都使用主变量,这只会使代码更复杂。
2.在第二个循环中,OLDNAME以空格开头,但是您使用STRIP存储了该名称,因此不会有任何匹配。
3.您应该在循环之前而不是内部分配OLDNAME和TMPTXT1。
4.使用缩进。
5.添加文档。

码:
/ * ---------------------------------------列出文件* /
PDS = '#IMSS1'         
X =外出('ML.')       
"LISTCAT LEVEL('"ThePDS"')"
X =外出('OFF')       

/ * -----------------------------仅保留相关文件名* /
A = 0                                                       
旧列表。 =''                                               
N = 1到ML.0                                             
   解析Var ML.N类型。名称 。                             
   If WordPos(类型,“ NONVSAM INDEX DATA CLUSTER”) > 0 Then Do
      A = A + 1                                             
      OldList.A = Name                                       
   End                                                       
结束                                                         

/ * ---------------------------------------------重命名文件* /
奥德斯特 = '#IMSS1'
NewStr ='#IMSS2'
我= 1对A                                         
   NewFile = OldList.I                               
   Do Forever                                         
      S = Pos(OldStr,NewFile)                         
      If S = 0 Then Leave                             
      NewFile = SubStr(NewFile,1,S-1) || NewStr || , 
         SubStr(NewFile,S+Length(OldStr))             
   End                                               
   对'OldFile.I'说'ALTER           
结束
当然,您不必这样写,这就是我喜欢这样做的方式
回到顶部
查看用户资料 发送私信
第75章

活跃用户


已加入:2014年6月9日
帖子:119
位置:CT

发布发表:2015年7月16日(星期四)下午7:49
引用回复

嗨,马索,

感谢您的代码。我喜欢。

一件事是我认为您错过了执行重命名的实际代码。

我在您的代码中添加了它。
码:
/ * REXX ----------------------------------列出文件* / 
主题 ='TTAT.TSP.TU14.CHANGED'                                 
X =外出('ML.')                                               
"LISTCAT LEVEL('"THEPDS"')"                                       
X =外出('OFF')                                               
/ * -----------------------------仅保留相关文件名* / 
A = 0                                                             
旧列表。 =''                                                     
DO N = 1到ML.0                                                 
   解析VAR ML.N TYPE。名称 。                                   
   IF WORDPOS(类型,“ NONVSAM索引数据集群”) > 0 THEN DO     
      A = A + 1                                                   
      OLDLIST.A = NAME                                           
   END                                                           
结束                                                               
/ * ---------------------------------------------重命名文件* / 
OLDSTR ='CHANGED'             
NEWSTR ='HAO'                                     
我= 1对A                                       
   NEWFILE = OLDLIST.I                             
   DO FOREVER                                       
      S = POS(OLDSTR,NEWFILE)                       
      IF S = 0 THEN LEAVE                           
      NEWFILE = SUBSTR(NEWFILE,1,S-1) || NEWSTR || ,
         SUBSTR(NEWFILE,S+LENGTH(OLDSTR))           
   END                                             
  [b] "ALTER '"OLDLIST.I"'",                           
        "NEWNAME('"NEWFILE"')" [/b]                     
   从'OLDLIST.I'到'NEWFILE说'ALTER'         
结束           
回到顶部
查看用户资料 发送私信
恩里科·索里切蒂

高级主持人


已加入:2007年3月14日
帖子:10715
所在地:意大利

发布发表于:2015年7月16日,星期四,8:04 pm
引用回复

不,他没有错过 icon_evil.gif

它说了<将要执行的命令>

测试时这是很正常的事情...

在执行测试之前,先说出要做什么,直到测试表明一切正确为止
回到顶部
查看用户资料 发送私信
恩里科·索里切蒂

高级主持人


已加入:2007年3月14日
帖子:10715
所在地:意大利

发布发表于:2015年7月16日,星期四,8:23 pm
引用回复

带有一些横向思考的编码选择

码:

老高管 = "#IMSS1"
NewHLQ ="#IMSS2"

lst.1 ="#IMSS1.DS1"
lst.2 ="#IMSS1.DS1.DATA"
lst.3 ="#IMSS1.DS2"
lst.4 ="#IMSS1.DS2.DATA"
lst.5 ="#IMSS1.DS3"
lst.0 = 5

do  l = 1 to lst.0
    interpret "parse var lst."l "with '"OldHLQ".' tail"
    NewNAME = NewHLQ"."tail
    say left("OldNAME("lst.l")",44) "NewNAME("NewNAME")"
结束
回到顶部
查看用户资料 发送私信
第75章

活跃用户


已加入:2014年6月9日
帖子:119
位置:CT

发布发表:2015年7月16日,星期四,9:08 pm
引用回复

嗨,恩里科,

我对“解释”指令不是很熟悉,它有什么作用?

谢谢
回到顶部
查看用户资料 发送私信
佩德罗

全球主持人


已加入:2006年9月1日
帖子:2214
地点:硅谷

发布发表于:2015年7月16日,星期四,9:13 pm
引用回复

回复:“ REXX INTERPRET做什么?”
看这里 click here
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> 清单& REXX

 


类似主题
话题 论坛 回覆
该主题已锁定:您无法编辑帖子或回复。 将匹配的记录写入输出文件 DFSORT / ICETOOL 11
没有新帖 比较文件记录计数百分比... DFSORT / ICETOOL 4
没有新帖 比较两个文件以查找位置/日期... 同步排序 2
没有新帖 如何在BMS Ph中列出BMS MAP屏幕... CICS 2
没有新帖 将文件从PD转换为显示... 同步排序 4
搜索我们的论坛:


回到顶部