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 outputEn 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
pinga 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 outputExercici 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
