REXX例程将返回唯一的字符串

时间:2018-10-01 11:53:34

标签: mainframe rexx

我想定义一个函数,该函数在每次调用时都返回唯一的字符串。该函数的返回值在接下来的50年中必须是唯一的。这是我累的事:

k.rand=USERID()
do i=1 to 10 by 1
 n=RANDOM(1,26)
k.i=word('a b c d e f g h I j k l m n o p q r s t u v w x y z ',n)
m.i= WORD('@ ! # $ % ^ * 1 2 3 4 5 6 7 8 9',i)
k.rand=k.rand ||k.i ||m.I
END
say k.rand

3 个答案:

答案 0 :(得分:7)

Rexx中没有内置的UUID函数。 Walmart Labs has open sourced a z/OS based service that generates UUIDs保证到34,000年:)

  

zUID是z / OS环境中启用了云的服务,可生成   使用专门的正在申请专利的算法的唯一标识符。它   保证可以生成100%的唯一标识符,直到年份   无需数据库系统进行管理就可以达到34,000。

     

Service以3种不同的十六进制格式(普通,guid和   以纯文本格式。它们没有包装在XML或JSON中   结构。

     

纯文本:32个字节,1234567890abcdef1234567890abcdef
  ess:34个字节,12345678-90abcdef12345678-90abcdef
  guid:36个字节,12345678-90ab-cdef-1234-567890abcdef

     

此服务无需授权。

     

除了启用网络功能外,您还可以直接调用此例程   在COBOL程序中使用CICS LINK命令。 HTTP接口   旨在使z / OS之外的更多消费者可以使用它   环境。

答案 1 :(得分:0)

您是否在z / OS系统上运行REXX?如果这样,您可以使用STCKE STORE CLOCK EXTENDED指令生成唯一编号,当在具有同步时钟的同一系统或sysplex上生成该指令时,该编号将具有数千年的唯一性。

您需要破解汇编器才能编写外部REXX函数。

STCKE    RSECT                                                         
STCKE    AMODE 31                                                      
STCKE    RMODE ANY                                                     
         SAVE  (14,12)                                                 
         LR    R12,R15                                                 
         USING STCKE,R12                                               
         USING EFPL,R1           REXX external function parameter list 
         L     R4,EFPLEVAL                                             
         L     R4,0(R4)          REXX evaluation block                 
         USING EVALBLOCK,R4                                            
         STCKE EVALBLOCK_EVDATA  Store STCKE in the function result area   
         MVC   EVALBLOCK_EVLEN,=F'16' length of result (STCKE)         
         LA    R15,0             RC=0                                  
         RETURN (14,12),RC=(15)                                        
         YREGS                                                         
         IRXEFPL                                                       
         IRXEVALB                                                      
         END     

并确保在REXX代码中将numeric digits设置为STCKF是一个16字节的大数字!

/* REXX */            

numeric digits 64     

do 10                 
  raw = stcke()       
  hex = c2x(raw)      
  num = x2d(hex)      
  say hex num         
end

答案 2 :(得分:-2)

在我们的站点上,有一些REXX工具,这些工具在被调用时将提交大型机作业。例如,如果您针对数据集调用该工具,则作业将在后台提交,以查找数据集中的记录数。

在给定的时间,REXX工具可以被调用N次。为了避免在假脱机中重复工作名称,我们提出了类似以下的内容。

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    . . . 
    <TargetFramework>netcoreapp2.0</TargetFramework>
    . . . 
  </PropertyGroup>
</Project>

NUM = RANDOM(000,999) JOBNAME=USERID()||NUM USERID()都是REXX中的内置函数。

RANDOM()返回TSO / E用户ID。更多详细信息here

USERID()返回一个随机数。更多详细信息here

here提供了一个代码片段供您尝试。