extraer una linea en un secuencial

Todo lo relacionado con REXX en este ambiente.
Avatar de Usuario
Vicente
Colaborador avanzado
Colaborador avanzado
Mensajes: 543
Registrado: 21 Jul 2011, 04:52
País: España
Ciudad: Malaga
Ocupación: Técnico en Sistemas

Re: extraer una linea en un secuencial

Mensaje por Vicente » 03 Ago 2016, 20:33

Hola Italo,
Algunas reglas básicas del REXX
1) Una instrucción DO agrupa todas las instrucciones que le siguen, como si fuesen usa sola, hasta la primera instrucción END no asociada a DO posterior.
Ejemplo:
DO
instrucción1
instruccion2
DO
instrucción 3
instrucción 4
END
instrucción 5
END

2) Bajo una condición IF ... THEN solo se escribe una instrucción
Bajo una condición ELSE solo se escribe una instrucción.
Pero esa única instrucción puede ser un DO que agrupa muchas instrucciones como una sola hasta su END
Es decir si escribes

IF x>0 THEN instrucción1
instrucción 2

Bajo la condición de IF solo estará instrucción1. La instrucción2 se ejecutará siempre
Recuerda que solo puede haber una instrucción bajo el IF, por lo que:

IF x>0 THEN instruccion1
instrucción2
ELSE

producirá un error ya que ELSE no es la segunda instrucción después del IF.

Para evitar problemas, yo SIEMPRE escribo DO después de THEN o ELSE aunque solo necesite escribir una instrucción afectada por la condición o su negación, así evito problemas. Por ejemplo
IF x>0 THEN DO
una instrucción o mas
END
ELSE DO
una instrucción o mas
END

otro ejemplo:
IF x>0 THEN DO
SAY 'X es mayor que cero'
IF y>0 THEN DO
SAY 'Y es mayor que cero'
END
ELSE DO
SAY 'y no es mayor que cero'
END
END /* del DO del primer IF */

El que no estén emparejadas las sentencias DO con END es motivo de problemas.
Si te sigue dando error tu código, escríbelo aquí y también el mensaje de error que da.

Respecto a lo que te comenté de DO WHILE frente a DO UNTIL, yo siempre prefiero utilizar DO WHILE por que me resulta más cercano a mi forma de pensar.
DO UNTIL primero ejecuta el grupo de instrucciones y después hace la pregunta para volver a ejecutarlo o no.
DO WHILE primero hace la pregunta y solo si es TRUE ejecuta el grupo de instrucciones.

Nota:
Estoy de vacaciones, es posible que algún día no lea el foro.
Varios días probando, equivocandote y volviendo a probar
pueden ahorrarte quince minutos de lectura de un manual.

Responder