将 return 一个唯一字符串的 REXX 例程
REXX routine that will return a unique string
我想定义一个函数,每次调用它时 return 都是一个唯一的字符串。此函数的 return 值在接下来的 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
Rexx 中没有内置的UUID 功能。 Walmart Labs has open sourced a z/OS based service that generates UUIDs 保证到 34,000 年 :)
zUID is a cloud enabled service in the z/OS environment that generates
a unique identifier using a specialized patent-pending algorithm. It
is guaranteed to generate 100% unique identifiers until the year
34,000 without requiring a database system to manage.
Service returns the UID in 3 different hex formats, plain, guid and
ess in plain text format. They are not wrapped in XML or JSON
structures.
plain: 32 bytes, 1234567890abcdef1234567890abcdef
ess: 34 bytes,12345678-90abcdef12345678-90abcdef
guid: 36 bytes, 12345678-90ab-cdef-1234-567890abcdef
No authorization is needed for this service.
In addition to being web enabled you can call this routine directly
using a CICS LINK command in your COBOL programs. The HTTP interface
was designed to make it available for more consumers out side the z/OS
environment.
在我们的网站上,有一些 REXX 工具,调用这些工具后将提交大型机作业。例如,如果您针对数据集调用该工具,将在后台提交作业以查找数据集中的记录数。
在给定时间,可以调用 REXX 工具 N 次。为了避免 spool 中的作业名称重复,我们提出了类似下面的内容。
NUM = RANDOM(000,999)
JOBNAME=USERID()||NUM
USERID()
和 RANDOM()
都是 REXX 的内置函数。
USERID()
returns TSO/E 用户 ID。更多详细信息 here。
RANDOM
returns 一个随机数。更多详情 here.
提供了一个代码片段 here 供您尝试。
您 运行 您的 REXX 在 z/OS 系统上吗?如果是这样,您可以使用 STCKE
STORE CLOCK EXTENDED
指令生成唯一的数字,当在同一系统或具有同步时钟的综合系统上生成时,该指令将在数千年内是唯一的。
您需要破解汇编器才能编写外部 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
我想定义一个函数,每次调用它时 return 都是一个唯一的字符串。此函数的 return 值在接下来的 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
Rexx 中没有内置的UUID 功能。 Walmart Labs has open sourced a z/OS based service that generates UUIDs 保证到 34,000 年 :)
zUID is a cloud enabled service in the z/OS environment that generates a unique identifier using a specialized patent-pending algorithm. It is guaranteed to generate 100% unique identifiers until the year 34,000 without requiring a database system to manage.
Service returns the UID in 3 different hex formats, plain, guid and ess in plain text format. They are not wrapped in XML or JSON structures.
plain: 32 bytes, 1234567890abcdef1234567890abcdef
ess: 34 bytes,12345678-90abcdef12345678-90abcdef
guid: 36 bytes, 12345678-90ab-cdef-1234-567890abcdefNo authorization is needed for this service.
In addition to being web enabled you can call this routine directly using a CICS LINK command in your COBOL programs. The HTTP interface was designed to make it available for more consumers out side the z/OS environment.
在我们的网站上,有一些 REXX 工具,调用这些工具后将提交大型机作业。例如,如果您针对数据集调用该工具,将在后台提交作业以查找数据集中的记录数。
在给定时间,可以调用 REXX 工具 N 次。为了避免 spool 中的作业名称重复,我们提出了类似下面的内容。
NUM = RANDOM(000,999)
JOBNAME=USERID()||NUM
USERID()
和 RANDOM()
都是 REXX 的内置函数。
USERID()
returns TSO/E 用户 ID。更多详细信息 here。
RANDOM
returns 一个随机数。更多详情 here.
提供了一个代码片段 here 供您尝试。
您 运行 您的 REXX 在 z/OS 系统上吗?如果是这样,您可以使用 STCKE
STORE CLOCK EXTENDED
指令生成唯一的数字,当在同一系统或具有同步时钟的综合系统上生成时,该指令将在数千年内是唯一的。
您需要破解汇编器才能编写外部 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