En Cobol solemos utilizar un switch para saber si estamos ante una determinada situación o ante otra.
Empecemos, por ejemplo, por los ficheros. Tenemos un programa que usa dos ficheros: uno de entrada y otro de salida. Dichos ficheros serán FENTRADA y FSALIDA.
Para esos ficheros podremos definir los siguientes switches:
01 SWITCHES.
05 FS-FENTRADA PIC X(02) VALUE ZEROES.
10 FENTRADA-OK VALUE '00'.
10 FENTRADA-FIN VALUE '10'.
05 SW-FIN-FENTRADA PIC X(01).
10 SI-FIN-FENTRADA VALUE 'S'.
10 NO-FIN-FENTRADA VALUE 'N'.
05 FS-FSALIDA PIC X(02) VALUE ZEROES.
10 FSALIDA-OK VALUE '00'.
10 FSALIDA-FIN VALUE '10'.
Cuando definamos los ficheros FENTRADA y FSALIDA en el FILE-CONTROL del área INPUT-OUTPUT SECTION indicaremos lo siguiente con respecto al file status de los ficheros:
FILE STATUS IS FS-FENTRADA.
FILE STATUS IS FS-FSALIDA.
Pues bien, vayamos al meollo del asunto. ¿Cómo podemos utilizar estos switch? En el caso del fichero de entrada, cuando abramos dicho fichero (OPEN INPUT FENTRADA) podemos controlar el file status devuelto:
IF FENTRADA-OK
<<fichero abierto>>
ELSE
<<error lógico>>
END-IF.
Cuando se lea de dicho fichero (READ FENTRADA INTO COPY) también podemos controlar el file status:
SET NO-FIN-FENTRADA TO TRUE
*-------------------------------------------------------
IF FENTRADA-OK
<<lectura correcta>>
ELSE
IF FENTRADA-FIN
SET SI-FIN-FENTRADA TO TRUE
ELSE
<<error lógico>>
END-IF
END-IF.
Tras la lectura del fichero de entrada podemos hacer una cosa u otra en función de si se ha llegado o no al final del mismo:
IF SI-FIN-FENTRADA
<<se ha llegado al final de FENTRADA, se hará lo que corresponda>>
ELSE
<<no se ha llegado al final de FENTRADA, se hará lo que corresponda>>
END-IF.
Continuamos con otros ejemplo de switch. Sobretodo uno que resulta muy interesante para hacer las condiciones de los IF más sencillas. Veamos el siguiente IF:
IF (campo = 2 or 4 or 6 or 8 or 10)
DISPLAY 'ES PAR.'
ELSE
DISPLAY 'ES IMPAR.'
END-IF.
Si declaramos un switch como el siguiente:
Y si se realiza un MOVE como este otro:
MOVE campo TO SW-PAR-O-IMPAR
La condición del IF anterior quedará tan sencilla como la que viene a continuación:
IF ES-PAR
DISPLAY 'ES PAR.'
ELSE
DISPLAY 'ES IMPAR.'
END-IF.
Pues esto es todo lo que puedo contar sobre el fascinante mundo de los switches. Espero que os resulte de utilidad.
IF FENTRADA-OK
<<fichero abierto>>
ELSE
<<error lógico>>
END-IF.
Cuando se lea de dicho fichero (READ FENTRADA INTO COPY) también podemos controlar el file status:
SET NO-FIN-FENTRADA TO TRUE
*-------------------------------------------------------
IF FENTRADA-OK
<<lectura correcta>>
ELSE
IF FENTRADA-FIN
SET SI-FIN-FENTRADA TO TRUE
ELSE
<<error lógico>>
END-IF
END-IF.
Tras la lectura del fichero de entrada podemos hacer una cosa u otra en función de si se ha llegado o no al final del mismo:
IF SI-FIN-FENTRADA
<<se ha llegado al final de FENTRADA, se hará lo que corresponda>>
ELSE
<<no se ha llegado al final de FENTRADA, se hará lo que corresponda>>
END-IF.
Continuamos con otros ejemplo de switch. Sobretodo uno que resulta muy interesante para hacer las condiciones de los IF más sencillas. Veamos el siguiente IF:
IF (campo = 2 or 4 or 6 or 8 or 10)
DISPLAY 'ES PAR.'
ELSE
DISPLAY 'ES IMPAR.'
END-IF.
Si declaramos un switch como el siguiente:
01 SWITCHES.
05 SW-PAR-O-IMPAR PIC 9(02).
10 ES-PAR VALUE 2,4,6,8,10.
10 ES-IMPAR VALUE 1,3,5,7,9.
Y si se realiza un MOVE como este otro:
MOVE campo TO SW-PAR-O-IMPAR
La condición del IF anterior quedará tan sencilla como la que viene a continuación:
IF ES-PAR
DISPLAY 'ES PAR.'
ELSE
DISPLAY 'ES IMPAR.'
END-IF.
Pues esto es todo lo que puedo contar sobre el fascinante mundo de los switches. Espero que os resulte de utilidad.
No hay comentarios:
Publicar un comentario