Процедура REXX, которая будет возвращать уникальную строку - PullRequest
0 голосов
/ 01 октября 2018

Я хочу определить функцию, которая будет возвращать уникальную строку каждый раз, когда она вызывается.Возвращаемое значение этой функции должно быть уникальным в течение следующих 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 голосов
/ 01 октября 2018

На нашем сайте есть несколько инструментов REXX, которые при вызове отправляют задания на мэйнфреймы.Например, если вы вызываете инструмент для набора данных, задание будет отправлено в фоновом режиме, чтобы найти количество записей в наборе данных.

В данный момент инструмент REXX может быть вызван N раз.Чтобы избежать дублирования имен заданий в спуле, мы придумали что-то вроде ниже.

NUM = RANDOM(000,999)
JOBNAME=USERID()||NUM    

И USERID(), и RANDOM() являются встроенными функциями в REXX.

USERID() возвращает идентификатор пользователя TSO / E.Подробнее здесь .

RANDOM возвращает случайное число.Подробнее здесь .

Предоставлен фрагмент кода здесь , чтобы вы могли его попробовать.

0 голосов
/ 12 ноября 2018

Работаете ли вы с REXX в системе z / OS?Если это так, вы можете генерировать уникальные числа, используя инструкцию 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     

И убедитесь, что вы установили numeric digits в коде REXX, поскольку STCKF - это 16-байтовое огромное число!

/* REXX */            

numeric digits 64     

do 10                 
  raw = stcke()       
  hex = c2x(raw)      
  num = x2d(hex)      
  say hex num         
end
0 голосов
/ 01 октября 2018

В Rexx нет встроенной функции UUID. Walmart Labs имеет службу на базе открытого источника z / OS, которая генерирует идентификаторы UUID гарантированно до 34 000 года :)

zUID - это облачная служба в среде z / OS, которая генерируетуникальный идентификатор с использованием специализированного запатентованного алгоритма.Гарантированно генерировать 100% уникальные идентификаторы до 34 000 года, не требуя управления системой баз данных.

Сервис возвращает UID в 3 различных шестнадцатеричных форматах: обычный, guid и ess в текстовом формате.Они не заключены в структуры XML или JSON.

plain: 32 байта, 1234567890abcdef1234567890abcdefess: 34 байта, 12345678-90abcdef12345678-90abcdefguid: 36 байт, 12345678-90ab-cdef-1234-567890abcdef

Для этой службы авторизация не требуется.

В дополнение к веб-активации вы можете вызвать эту подпрограмму напрямую, используя CICS LINK.Команда в ваших программах COBOL.Интерфейс HTTP был разработан, чтобы сделать его доступным для большего числа потребителей вне среды z / OS.

...