En aquest tema, aprendrem com REXX pot interactuar amb altres programes externs. Aquesta capacitat és crucial per a la integració de REXX en entorns de treball més amplis, on pot ser necessari comunicar-se amb altres aplicacions o serveis.
Objectius del Tema
- Entendre com executar programes externs des de REXX.
- Aprendre a capturar la sortida de programes externs.
- Gestionar errors en la interfície amb programes externs.
Executar Programes Externs
Utilitzant la Comanda ADDRESS
REXX permet executar comandes del sistema operatiu o altres programes externs utilitzant la comanda ADDRESS
. Aquesta comanda redirigeix les instruccions a un entorn específic, com el sistema operatiu.
Exemple Bàsic
En aquest exemple, la comanda dir
(en un sistema Windows) llista els fitxers i directoris del directori actual.
Capturar la Sortida de Programes Externs
Per capturar la sortida d'un programa extern, podem utilitzar la funció LINEIN
per llegir la sortida línia per línia.
Exemple
/* Executar una comanda i capturar la seva sortida */ address SYSTEM "dir > output.txt" output = "" do while lines("output.txt") > 0 output = output || linein("output.txt") || " " end call lineout "output.txt", "" say output
En aquest exemple, la sortida de la comanda dir
es redirigeix a un fitxer output.txt
, que després es llegeix línia per línia i es concatena en una variable output
.
Gestionar Errors
Quan es treballa amb programes externs, és important gestionar els errors que poden sorgir durant l'execució. REXX proporciona mecanismes per capturar i gestionar aquests errors.
Utilitzant SIGNAL ON ERROR
Podem utilitzar la instrucció SIGNAL ON ERROR
per capturar errors i prendre accions correctives.
Exemple
/* Capturar errors durant l'execució d'una comanda externa */ signal on error address SYSTEM "nonexistent_command" say "Aquesta línia no s'executarà si hi ha un error" exit error: say "S'ha produït un error durant l'execució de la comanda externa" exit
En aquest exemple, si la comanda nonexistent_command
falla, el control es transfereix a l'etiqueta error
, on es pot gestionar l'error adequadament.
Exercicis Pràctics
Exercici 1: Executar i Capturar Sortida
- Escriu un programa REXX que executi la comanda
ping
a una adreça IP (per exemple,8.8.8.8
) i capturi la sortida. - Mostra la sortida capturada a la pantalla.
Solució
/* Executar la comanda ping i capturar la sortida */ address SYSTEM "ping 8.8.8.8 > ping_output.txt" output = "" do while lines("ping_output.txt") > 0 output = output || linein("ping_output.txt") || " " end call lineout "ping_output.txt", "" say output
Exercici 2: Gestió d'Errors
- Escriu un programa REXX que intenti executar una comanda que no existeix i gestioni l'error mostrant un missatge adequat.
Solució
/* Capturar errors durant l'execució d'una comanda externa */ signal on error address SYSTEM "nonexistent_command" say "Aquesta línia no s'executarà si hi ha un error" exit error: say "S'ha produït un error durant l'execució de la comanda externa" exit
Resum
En aquesta secció, hem après com REXX pot interactuar amb programes externs utilitzant la comanda ADDRESS
. Hem vist com executar comandes del sistema operatiu, capturar la seva sortida i gestionar errors que poden sorgir durant l'execució. Aquestes habilitats són essencials per integrar REXX en entorns de treball més amplis i automatitzar tasques que requereixen la col·laboració amb altres aplicacions.
En el següent tema, explorarem les macros REXX, que ens permetran crear seqüències de comandes reutilitzables per simplificar i optimitzar el nostre codi.
Curs de Programació REXX
Mòdul 1: Introducció a REXX
- Què és REXX?
- Configuració de l'Entorn REXX
- Hola Món en REXX
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Conceptes Bàsics de Programació
- Operadors i Expressions
- Estructures de Control: IF/THEN/ELSE
- Bucles: DO i LEAVE
- Entrada i Sortida
- Manipulació Bàsica de Cadenes
Mòdul 3: Programació Intermèdia en REXX
- Funcions i Subrutines
- Funcions Incorporades
- Gestió d'Errors
- Operacions d'Entrada/Sortida de Fitxers
- Treballant amb Arrays
Mòdul 4: Programació Avançada en REXX
- Manipulació Avançada de Cadenes
- Tècniques de Parsing
- Interfície amb Programes Externs
- Macros REXX
- Optimització del Rendiment