45
Copyright © 2005 - N. Boc alandro 1 REXX – Un buen lenguaje

REXX - 1 - Básico

Embed Size (px)

Citation preview

  • REXX Un buen lenguaje

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Diseado por Mike Cowlishaw entre 1979 y 1982, en IBM (UK) para CMS. (Conversational Monitor System de VM)Es un lenguaje de facil programacin y completamente distinto a otros. Basicamente es un intrprete pero tambien se lo puede compilar.Fue creado para facilitar la creacin de comandos, macros, prototipos.Hoy corre en todas las plataformas IBM y tambien en otras (Windows,DOS,Tandem,VAX,Amiga,Unix)Un poquito de historia

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Es muy legible (en ingles).Esta diseado para escribir naturalmente (en ingles).Solo el lenguaje puro es independiente de la plataforma.Excelente manejo de variables.Las variables son dinmicas. Las variables NO SE DECLARAN.Las variables no tienen lmite.

    Bases de su diseo

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Es muy fcil de aprender.El formato de escritura es totalmente LIBRE. Contiene muchas built-in funtions.Es independiente del Case de las letras. Permite invocar comandos externos (propios del entorno).Facilidades muy grandes para el Parsing.Buenas herramientas para hacer debuging.

    Bases de su diseo (cont)

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1/* REXX comentario obligatorio */ say Hola. Yo soy el REXX. Tu quien eres? pull name if name = then say Ud. es muy maleducado else say Mucho gusto name exit 0

    OS/390 TSO/E REXX Reference es el manual bsicoUn vistazo a una REXX

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1/* REXXTRY Una buena exec */ say Cada instruccin es ejecutada cuando se presiona Enter say Para salir escriba EXIT do forever /* loop infinito */ say /* prompt */ parse external linea /* ingresar la instruccin*/ interpret linea /* ejecutar la instruccin */ end /* fin del loop */ Es lo primero que tendran que escribir.Una REXX util

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Si. Es posible pero no estoy forzado por el REXX.Secuencia Top Down (El exit al final).Iteracin (Do while o Do until).Seleccin (Case o Choice).Prohibido el Go to.Programas cortos y de facil lectura.Programas en arbol.Uso intensivo de funciones y subrutinas.

    Programacin estructurada ?

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Secuencia Top-DownEntry PointExitPrograma APrograma BPrograma C

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Iteracin (Do While)Testeo condicinFalsoVerdaderoProceso

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Iteracin (Do Until)Testeo condicinVerdaderoFalsoProceso

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Seleccin (Choice)Testeo condicinFalsoVerdaderoIf x=1 Then say holaElse Say adios

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Seleccin (Case)SelectPgm APgm BPgm nPgm ZEndWhenCase ACase BCase nOtherwise

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Go To ProhibidoEn REXX Go to xxx se escribe Signal xxxHay casos especiales de Signal ON ...Signal label

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Programas cortos y de facil lecturaCada programa o subrutina no debe ocupar (en lo posible) mas de una o dos pantallas.Debe haber mas comentarios que cdigo propiamente dicho.Los nombres de las variables deben tener sentido (evitar por ejemplo pepe=10)Los nombres de las variables no deben ser demasiado largos.Se debe mantener el indentado de las lineas.Debe haber prlogos descriptivos.Se debe usar el sentido comn y elegir la forma mas sencilla para el cdigo.

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Programas en arbol Funciones y subrutinasRutina principalInicializacinProcesoFinalizacinAltasBajasModificacionesCada cuadro (salvo el superior) puede ser una subrutina o una funcin

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 1Como empiezoUsando TSO-ISPFEl orden de bsqueda del intrprete de CLIST de TSO es SYSEXEC y luego SYSPROC.Con la REXX llamada MIREXX se concatena con la SYSEXEC la librera llamada userid.REXX.EXEC.A partir de ah se puede ejecutar desde la opcion 6 cualquier member de ese dataset.Si se usa el SPLIT de pantalla se debe volver a ejecutar MIREXX.

    Copyright 2005 - N. Bocalandro

  • REXX Ejercicio 1Manos a la obra

    Copyright 2005 - N. Bocalandro

  • REXX Ejercicio 1Manos a la obraLogonearse en TSOAlocar la librera userid.REXX.EXEC (FB,80,3200,Dir 20)Usar MIREXXEscribir la exec REXXTRY y luego usarla.Usar mayusculas y minusculas para escribir.Ejecutarla y probar con sentencias REXX.Felicidades. La primera exec REXX funciona.Que pasa si se escribe algo invlido?Bueno, funciona mas o menos, pero ya mejorar.

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Comentarios , literales y continuaciones/* Esto es un comentario *//* Esto ......................... tambien .............es ............ un comentario largo (hasta 512 caracteres posibles */Say variable /* este es el comentario de esta linea */ Los literales deben ir entre Comillas o apstrofesEl REXX pasa todo a mayusculas salvo los literales y el contenido de las variables.Una instruccin termina con ; o al fin de la linea salvo que ,continue en el renglon siguiente.

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Creando las variablesVariableA = AbcEl REXX la ve como VARIABLEA y su contenido es AbcTambien se asigna valor a una variable con las instrucciones:PARSE ARG PULL VALUE() o con un pgm en otro lenguaje.X = 1 ; te=literal;ss=otroEl nombre de una variable puede ser de hasta 250 caracters,pero no puede empezar con un nmero.Hexa=f1 f2f3x /* asignar un valor hexadecimal */Bina=01100010b /* asignar un valor binario */

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2El contenido de las variablesX=1 es igual a X=1El REXX a os nmeros los ve como string (literales)El lmite de un string es 16 Mb.te=STRING es lo mismo que te=STRING a=b;c=a;d=aCuanto valen las variables?A vale B C vale B D vale aa=10;c=a;d=aA vale 10 C vale 10 D vale a

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Smbolos aritmticosREXX intenta realizar operaciones matemticas cada vez que encuentra: + (suma) (resta) * (multiplicacin) / (divisin) ** (potencia) % (divisin entera) // (resto de la division)Para ua operacin compleja se usa las reglas de precedencia clsicas:() Parentesis+ - Cambio de signo (prefijos)** Potenciacin* / % // Multiplicacin y divisin+ - Suma y resta

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2La instruccin SAYEsta instruccin se usa constantemente (excelente para debug) y normalmente para mostrar algo en pantalla.Say Esto es literal En pantalla Esto es literalSay 12/4+5 En pantalla 8Say 12/4+5 En pantalla 12/4+5Say a=b En pantalla a=BB=10;Say a=b En pantalla a=10B=10;Say a=b+2 En pantalla a=12B=10;Say a=b+2 En pantalla a=10+2Use la REXXTRY como calculadora.

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Los StringsLos strings son muy bien manejados por REXX.Para concatenar se usan:(blanco) (por la fuerza)|| Say Juntar estas palabras T=estas ; say Juntar t palabras Say Juntartpalabras Say Juntar || t || palabras Say Juntar t || palabras

    Juntar estas palabrasJuntar estas palabrasJuntarestaspalabrasJuntarestaspalabrasJuntar estas palabras

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Leyendo el teclado (y el STACK)PULL es la instruccin por excelencia. (Convierte a mayusculas lo que lee y lo pone en una vaiable.No lee del teclado sino del STACK El STACK es un concepto normal en CMS pero no en otras plataformas, por lo que el REXX lo crea.Pull lee la primera linea del STACK. Si el STACK est vacio se lee el teclado.En TSO el teclado suele ser la SYSTSIN.Mas adelante veremos que PULL es una simplificacin de PARSE PULL.Probar con REXXTRY Pull var ; say var

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Cofee break

    Copyright 2005 - N. Bocalandro

  • REXX Ejercicio 2Manos a la obra siempre con REXXTRYEjecutar lo siguiente (en orden):a=1;b=2;c=FalsoSay a b cSay a+bSay a+b+cQue pas?Reinvocar REXXTRY

    Say a b cqu pas? Say 11110000bqu pas?Say F3F5xqu pas?Probar lo visto en paginas 23, 24 y 26. Jugar con la REXXTRY (como calculadora o lo que quieran hacer).

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Comparaciones de strings Las comparaciones son SIEMPRE lgicas y son: VERDAD cuando da 1 y FALSO cuando da 0Son siempre dependientes del case (mayusculas/minsculas)Pueden ser exactamente iguales o igualesVar1 = HOLA /* Asigna valor */ Say var1 = HOLA /* compara igual */Say var1 = hola /* compara igual */Say var1 = = HOLA /* no compara (exacta) */ Var2 = Hola /* Asigna valor */Say var1 = var2 /* no compara (case) */

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Comparaciones numricas y estrictasLos signos comparadores son:= Igual = \= No igual (\ es para teclados sin )> Mayor que< Menor que>= Mayor o igual que> Estrictamente mayor (byte por byte)
  • REXX Captulo 2Operadores logicos y lgica boleanaSe pueden concatenar comparasiones lgicas pero siempre se debe tener como resultado de cada una ya sea 0 o 1.Operadores & AND | OR && OR exclusiva (Cuidado) \ o Negacin (prefijo) Se los puede concatenar en forma implcita o explcita (con parntesis) que es lo recomendado para facilitar la lectura y estar seguro de cual es el orden de precedencia.

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2IF / Then / ElseSintxis: IF expresin lgica THEN instruccin (solo una) (opcional) ELSE instruccin (solo una)Para usar mas de una instruccin se debe usar DO / END IF expresion logica THEN DO instruccin 1 instruccin 2 ........ END ELSE DO instruccin 3 instruccin 4 .......... END

    Este grupo de instrucciones se ejecuta cuando es verdadEste grupo de instrucciones se ejecuta cuando es falso

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Anidando IF / Then / Else y DO/ENDSe pueden anidar tantos IF/THEN/ELSE como desee. (No recomendado)IF a=b Then IF c=b Then IF c=j then Say Hola /* es correcto */IF (a=b) & (c=b) and (c=j) then say hola /* Pero esto es lo mismo */

    If a=b then Do If c=b then Do If c=j then Do Say Hola End End End /* Esto tambien es correcto pero se lee mejor *//* Conviene poner el DO por si en el futuro se *//* agrega alguna otra instruccin. *//* Otro DO (El segundo) *//* *//* Otro DO (El tercero) *//* *//* End (del tercero) *//* End (del segundo) *//* End (del primero) */

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Select/When/then/otherwise/endDe acuerdo a la lgica del programa a veces (casi siempre) es ms conveniente usar Select. Sintxis Comienza con Select Termina con END (Obligatorio)Si x es igual a b se ejecuta este DO/ENDDespues sale del selectSi b es igual a c se ejecuta este SayDespues sale del selectSi no se da ningn when verdadero seejecuta el OtherwiseSelect When x=b then Do End When b=c then Say Hola Otherwise Say ErrorEnd

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2LoopsLos loops se pueden hacer a mano pero lo lgico es usar los DO/END.Sintxis

    Do i=1 to 1000 by 2 /* i es la variable de control, y el step es 2 */Do while a >1 /* se ejecuta mientras a sea mayor que 1 */Do until a =1 /* se ejecuta hasta que a sea igual a 1 */Do 100 /* se ejecuta 100 veces */Do forever /* se ejecuta indefinidamente */

    En el END si se desea se puede poner la variable de control para mejorar la lectura pero no es necesario y es una mejor tcnica es la sangria. (El REXX no lo necesita pero nosotros para leer si).

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Alterando los LoopsExisten instrucciones que pueden alterar los loops cambiando su lgica.Como alterar el loop (siempre conviene usar variable de control)Iterate i /* Vuelve al Do cuya variable de control es i */ /* (si no esta es el de ms adentro) */Leave i /* Sale del loop cuya variable de control es i */ /* (si no est sale de ???? - Incierto ) */Exit /* Termina la exec abruptamente */ /* No se debe usar dentro de un loop */Return /* Termina la subrutina abruptamente */ /* No se debe usar dentro de un loop */i=i+1 /* alterar el valor de la variable de control */ /* No se debe hacer */El GO TO est prohibido, entonces que hacer ?

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Leyendo parmetrosPara leerlos se usa la instruccin ARG. (Igual a PARSE UPPER ARG)SintaxisARG var1 var2 .... varn Por default los separadores son uno o mas blancos.

    Se debe recordar SIEMPRE que el REXX fue desarrollado para trabajar con strings de carateres y fundamentalmente con palabras.

    Ejemplos:TSO REXXTRY 31 2 mi Mama me amaARG v1 v2 v3Say v1 v2 v331 2 MI MAMA ME AMASe pueden pasar parmetros desde la linea de comandos.

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Analizando variables (PARSING)La instrucin PARSE y tiene muchos usos. Para una variable es:SintaxisPARSE VAR var1 antes separador despues

    Ejemplo 1:Var1= 20:02:33 Parse var var1 hh : mm : ssSay hh mm ss20 02 33 Ejemplo 2:JJ= Somos unos vivos barbaros Parse var jj que cuantos somos . /* (notar el puntito) */Say que ; somos ; cuantos Somos ; vivos ; unos Se pueden analizar una variable y separarla en otras.

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 2Cofee break

    Copyright 2005 - N. Bocalandro

  • REXX Ejercicio 3Manos a la obra siempre con REXXTRYEjecutar lo siguiente:REXXTRY hola 1 2 33 salidaSay 44 = 44Say 44 = 45 Say 44 = 44.0000000001Arg a b c d Say dArg jjSay jjIf b=c then say A Else then say AdiosDo i=1 to 10;say i;end Parse arg kkSay kkParse var kk . 33 restoSay restott= HOLA ; Say a = tt(La opcin 6 o READY no convierten a maysculas.) Jugar con la REXXTRY.

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 3FuncionesSintaxisx=funcion(p1,p2,...,p20) /* mximo 20 parmetros */Ej:a=userid() /* devuelve el userid */n=words(string) /* devuelve nmero palabras del string */If PS01 = userid() then say Hola Norberto else ExitUn programa o una rutina REXX que devuelve un resultado simple o un string se llama funcin. SIEMPRE van dentro de una expresin.Existen funciones internas (built-in) o externas (TSO/E externas, nuestras propis REXX, programas en otro lenguaje).El orden de bsqueda es el del prrafo anterior.

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 3Funciones built-in (String)Ej:Say substr(Hola Pepe,2,5)ola PVer TSO/E REXX Reference en TSO/E Bookshelf para sintaxisExisten cerca de 30 funciones para manejo de strings.SUBSTR, STRIP, LEFT, RIGHT,DELSTR. (extraen parte de un string)INSERT,CENTRE,JUSTIFY,OVERLAY. (agregan partes a un string)POS,LASPOS,VERIFY,ABBREV. (encuentran algo en un string)WORD,WORDINDEX,WORDLENGTH,WORDPOS,WORDS,DELWORD,SUBWORD. (manejan palabras)LENGTH (longitud de un string)TRANSLATE (traduce un string)REVERSE (invierte un string)

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 3Funciones built-in (otras)Ej:Say D2C(129) /* '81'x en EBCDIC es 'a' */aVer TSO/E REXX Reference en TSO/E Bookshelf para sintaxisDATATYPE (testea el tipo de dato)COMPARE (compara un string con otro)CENTER/CENTRE,COPIES,FORMAT,JUSTIFY, (formatean un string) LEFT,RIGHT,SPACE. (formatean un string)C2X,C2D,D2C,D2X,X2C,X2D,B2X,X2B (Decimal,heXa,Binario to D,X,B) BITAND,BITOR,BITXOR (funcin logica bit a bit)ABS,MIN,MAX,SIGN,TRUNC,FORMAT. (manipulan nmeros)RANDOM,DIGITS,FORM,FUZZ (manipulan nmeros)

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 3Funciones built-in (algunas ms)Ej: /* REXX2 command */ SAY "This is output from the REXX2 command " /* This will be trapped */ RETURN ------------------------------- x = OUTTRAP('VAR.') "%REXX2" y = OUTTRAP('OFF') say x This is output from the REXX2 command EXITVer TSO/E REXX Reference en TSO/E Bookshelf para sintaxisDATE,TIME,USERID (informacin especfica de uso comn)SYSVAR,MVSVAR,SYSCPUS (informacin especfica sysprog) SOURCELINE,ERRORTEXT;CONDITION,LINESIZE (diagnstico) OUTTRAP,STORAGE,VALUE,SYMBOL,GETMSG,LISTDSI,SYSDSN,ARG,QUEUED,ADDRESS,TRACE,PROMPT,MSG (funciones especiales)

    Copyright 2005 - N. Bocalandro

  • REXX Captulo 3Cofee break

    Copyright 2005 - N. Bocalandro

  • REXX Ejercicio 4Manos a la obra siempre con REXXTRYEjecutar lo siguiente:Say time()Say time(c) Say date()Say date(e)Call date e a=Que bueno que es el REXXSay words(a)Say wordpos(REXX,a)Say wordindex(a,1)Say left(a,20,-) Say datatype(a)Say datatype(120)Say random()Say strip( A B C ) Say reverse( ABC )Say random()Say translate(a,$,e)(La opcin 6 o READY no convierten a maysculas.) Jugar con la REXXTRY.

    Copyright 2005 - N. Bocalandro