Pregunta

Tengo algo de código Perl (para análisis de rendimiento) desarrolló por primera vez en Linux, que ahora tiene que ser portado a la unidad central. Al parecer REXX es el lenguaje de programación de elección en esa plataforma, pero este script Perl se basa principalmente en las matrices asociativas (básicamente matrices donde el índice es una cadena).

¿Hay una manera que en REXX? ¿Cómo lo haría código que algo como:

$arr{"Pax"} = "Diablo";
$arr{"Bob"} = "Dylan";
print $arr{"Pax"} . "\n";
if (defined $arr{"no"}) {
        print "Yes\n";
} else {
        print "No\n";
}
¿Fue útil?

Solución

Puede utilizar madre variables, no exactamente como matrices, pero muy similar

/* REXX */
NAME = PAX
ARRAY.NAME = "DIABLO"
NAME = BOB
ARRAY.NAME = "DYLAN"
NAME = 'PAX'
SAY "ARRAY.PAX " IS ARRAY.NAME
NAME = 'BOB'
SAY "ARRAY.BOB " IS ARRAY.NAME
NAME = 'SANDY'
SAY "ARRAY.SANDY " IS ARRAY.NAME
IF ARRAY.NAME = "ARRAY.SANDY" THEN SAY "ARRAY.SANDY IS EMPTY"

Lo anterior Rexx imprimirá

ARRAY.PAX  IS DIABLO
ARRAY.BOB  IS DYLAN
ARRAY.SANDY  IS ARRAY.SANDY
ARRAY.SANDY IS EMPTY

También puede ser compuesto como A.B.C Una variable madre si está vacío volverá en sí. No hay manera de iterar de un tallo que no utiliza números consecutivos como el índice, que yo sepa.

IBM manual con referencia a las variables del tallo

Perl está disponible como una característica adicional gratis para ZOS Herramientas de IBM con puerto para z / OS

Otros consejos

Sólo quiero añadir un poco más a la respuesta dada por Deuian. Estoy de acuerdo, las variables de REXX madre son la respuesta.

variables de REXX simples por defecto a su propio nombre. Por ejemplo:

/* REXX */
SAY X

imprimirá "X" hasta X se le asigna otro valor:

/* REXX */
X = 'A'
SAY X

imprimirá "A".

No es gran sorpresa hasta ahora. las variables madre son un poco diferentes. los cabeza del vástago no se evalúa, solamente el bit después del punto inicial es.

Para ilustrar:

/* REXX */                                                           
X. = 'empty'   /* all unassigned stem values take on this value */
A. = 'nil'
B = 'A'        /* simple variable B is assigned value A */                                                      
X = 'A'        /* simple variable X is assigned value A */                                                      
SAY X.A        /* prints: empty */                                 
X.A = 'hello'  /* Stem X. associates value of A with 'hello' */
SAY X.A        /* prints: hello */                                   
SAY X.B        /* prints: hello */                                   
SAY X.X        /* prints: hello */                                   

Aviso X la madre y el A nombres no son evaluados, sin embargo, el las variables X y A que aparecen después de ellos son. Algunas personas encuentran esto una poco confuso - pensar en ello durante un tiempo y hace gran sentido.

El z / OS versión de REXX no proporciona una forma natural para repetir una variable tallo. La forma más sencilla de hacerlo es construir su propio índice. Por ejemplo:

/* REXX */
X. = ''
DO I = 1 TO 10
  J = RANDOM(100, 500) /* Random # 100..500 */
  X.INDEX = X.INDEX J  /* concatinate J's with 1 space between */
  X.J = 'was picked'   /* Associate 'was picked' with whatever J evalauates to */
  END

DO I = 1 TO WORDS(X.INDEX) /* Number of blank delimited 'words' */
  J = WORD(X.INDEX, I)     /* Extract 1 'word' at a time */
  SAY J X.J                /* Print 'word' and its associated value */
  END

Pretty trivial, pero ilustra la idea. Sólo asegúrese de que INDEX (o lo que el nombre elegir) para contener los nombres de indexación no hace estallar para arriba como un valor asociativo! Si esto es una posibilidad, utilizar alguna otra variable para contener el índice.

El último punto. Observe cada uno de mis ejemplos comienza con /* REXX */ se puede encontrar que esto tiene que ser la primera línea de sus programas REXX en z / OS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top