En ocasiones tenemos que generar por jcl un fichero para exportar posteriormente a Excel.
Podemos hacer dos cosas:
1º) Generar el fichero sin cabecera
2º) Generar el fichero con cabecera
Optar por el primer punto es lo más fácil porque sólo tendríamos que preparar un programa que generase un fichero de salida cuya copy o estructura sería algo como lo siguiente:
01 W-REG-SALIDA.
05 W-CAMPO1 PIC X(10).
05 W-FILLER1 PIC X(01) VALUE ';'.
05 W-CAMPO2 PIC X(10).
05 W-FILLER2 PIC X(01) VALUE ';'.
:
:
05 W-CAMPO9 PIC X(10).
05 W-FILLER9 PIC X(01) VALUE ';'.
Cuando se ejecutase el programa en cuestión tendríamos un fichero del tipo:
CAMPO1;CAMPO2;.....;CAMPO9;
De manera que podríamos descargar dicho fichero como un txt, y pasarlo a Excel de una vez que lo tuviéramos descargado en el equipo como txt.
Aunque optar por la segunda opción no significa mayor dificultad ni complejidad pero sí habría que tener en cuenta alguna cosa. Veamos este caso en profundidad.
En este caso también tenemos que tener un programa que genere un fichero de salida con una estructura similar a la que acabamos de ver para la primera opción. Pero en este caso tenemos que tener en cuenta la longitud del fichero, y ¿por qué? Muy fácil, la respuesta está en relación al fichero que generemos con la cabecera. Es decir, tras ejecutar el programa que genere el fichero de salida con la estructura antes vista (contiene los datos separados por puntos y coma) se ejecutará el siguiente paso:
//PASOCAB EXEC PGM=SORT
//SORTIN DD *
//SORTOUT DD DSN=<<FICHERO-CABECERA>>,
// DISP=(,CATLG,DELETE)
// SPACE=(TKK,(10,1),RLSE),
// DCB=(RECFM=FB,LRECL=621,BLKSIZE=27945)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(C'NOMB-COL1;',C'NOMB-COL2;',...C'NOMB-COLN;')
En el paso de SORT que acabamos de ver se genera un fichero con la cabecera que posteriormente tendrá la Excel. Cabe destacar lo siguiente: en el OUTREC FIELDS tenemos que, para incluir una nueva cabecera para encabezar una determinada columna, se debe poner
C'NOMBRE-CABECERA;'
Y aquí viene lo importante: te tienes que fijar con qué longitud se genera este fichero. La longitud con la que se genere este fichero te la tienes que apuntar. Si has leído con atención, el fichero de salida generado en el programa ejecutado con anterioridad al paso antes mostrado debe tener la misma longitud que el fichero de cabecera generado en el paso de SORT que acabamos de ver.
Llegados a este punto tenemos dos ficheros:
Lo último que tenemos que hacer es unir ambos ficheros en uno solo mediante un paso de SORT como el siguiente:
//PASOFEX EXEC PGM=SORT
//SORTIN DD DSN=<<FICHERO-CABECERA>>,DISP=SHR
// DD DSN=<<FICHERO-DATOS>>,DISP=SHR
//SORTOUT DD DSN=<<FICHERO-EXPORTAR-EXCEL>>,
// DISP=(,CATLG,DELETE)
// SPACE=(TKK,(10,1),RLSE),
// DCB=(RECFM=FB,LRECL=621,BLKSIZE=27945)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
El resultado es un fichero en el que la primera línea es la cabecera (CAB1;...;CAB9;) y el resto de filas son los datos (CAMPO1;...;CAMPO9;). En este punto podríamos descargar el fichero resultante como un txt, y pasarlo a Excel de una vez que lo tuviéramos descargado en el equipo como txt.
En lugar de separar cada uno de los campos con el símbolo ; también existe otra variante que consiste en separar los campos mediante tabuladores. Para realizar esto tendríamos que definir el símbolo tabulador (X'05') de manera que en el programa cobol que generase el correspondiente fichero de datos tendríamos que tener una estructura como la siguiente:
01 W-REG-SALIDA.
05 W-CAMPO1 PIC X(10).
05 W-FILLER1 PIC X(01) VALUE X'05'.
05 W-CAMPO2 PIC X(10).
05 W-FILLER2 PIC X(01) VALUE X'05'.
:
:
05 W-CAMPO9 PIC X(10).
05 W-FILLER9 PIC X(01) VALUE X'05'.
Esto ha sido todo por hoy. Espero que os haya resultado de utilidad.
Podemos hacer dos cosas:
1º) Generar el fichero sin cabecera
2º) Generar el fichero con cabecera
Optar por el primer punto es lo más fácil porque sólo tendríamos que preparar un programa que generase un fichero de salida cuya copy o estructura sería algo como lo siguiente:
01 W-REG-SALIDA.
05 W-CAMPO1 PIC X(10).
05 W-FILLER1 PIC X(01) VALUE ';'.
05 W-CAMPO2 PIC X(10).
05 W-FILLER2 PIC X(01) VALUE ';'.
:
:
05 W-CAMPO9 PIC X(10).
05 W-FILLER9 PIC X(01) VALUE ';'.
Cuando se ejecutase el programa en cuestión tendríamos un fichero del tipo:
CAMPO1;CAMPO2;.....;CAMPO9;
De manera que podríamos descargar dicho fichero como un txt, y pasarlo a Excel de una vez que lo tuviéramos descargado en el equipo como txt.
Aunque optar por la segunda opción no significa mayor dificultad ni complejidad pero sí habría que tener en cuenta alguna cosa. Veamos este caso en profundidad.
En este caso también tenemos que tener un programa que genere un fichero de salida con una estructura similar a la que acabamos de ver para la primera opción. Pero en este caso tenemos que tener en cuenta la longitud del fichero, y ¿por qué? Muy fácil, la respuesta está en relación al fichero que generemos con la cabecera. Es decir, tras ejecutar el programa que genere el fichero de salida con la estructura antes vista (contiene los datos separados por puntos y coma) se ejecutará el siguiente paso:
//PASOCAB EXEC PGM=SORT
//SORTIN DD *
//SORTOUT DD DSN=<<FICHERO-CABECERA>>,
// DISP=(,CATLG,DELETE)
// SPACE=(TKK,(10,1),RLSE),
// DCB=(RECFM=FB,LRECL=621,BLKSIZE=27945)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(C'NOMB-COL1;',C'NOMB-COL2;',...C'NOMB-COLN;')
C'NOMBRE-CABECERA;'
Y aquí viene lo importante: te tienes que fijar con qué longitud se genera este fichero. La longitud con la que se genere este fichero te la tienes que apuntar. Si has leído con atención, el fichero de salida generado en el programa ejecutado con anterioridad al paso antes mostrado debe tener la misma longitud que el fichero de cabecera generado en el paso de SORT que acabamos de ver.
Llegados a este punto tenemos dos ficheros:
- Fichero de datos: generado por programa en el que tenemos la información requerida separada por puntos y comas, teniendo algo como lo siguiente CAMPO1;CAMPO2;.....;CAMPO9;
- Fichero de cabecera: generado mediante un paso de SORT (ver el paso de SORT incluido), teniendo algo como lo siguiente CAB1;...;CAB9;
Lo último que tenemos que hacer es unir ambos ficheros en uno solo mediante un paso de SORT como el siguiente:
//PASOFEX EXEC PGM=SORT
//SORTIN DD DSN=<<FICHERO-CABECERA>>,DISP=SHR
// DD DSN=<<FICHERO-DATOS>>,DISP=SHR
//SORTOUT DD DSN=<<FICHERO-EXPORTAR-EXCEL>>,
// DISP=(,CATLG,DELETE)
// SPACE=(TKK,(10,1),RLSE),
// DCB=(RECFM=FB,LRECL=621,BLKSIZE=27945)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
El resultado es un fichero en el que la primera línea es la cabecera (CAB1;...;CAB9;) y el resto de filas son los datos (CAMPO1;...;CAMPO9;). En este punto podríamos descargar el fichero resultante como un txt, y pasarlo a Excel de una vez que lo tuviéramos descargado en el equipo como txt.
En lugar de separar cada uno de los campos con el símbolo ; también existe otra variante que consiste en separar los campos mediante tabuladores. Para realizar esto tendríamos que definir el símbolo tabulador (X'05') de manera que en el programa cobol que generase el correspondiente fichero de datos tendríamos que tener una estructura como la siguiente:
01 W-REG-SALIDA.
05 W-CAMPO1 PIC X(10).
05 W-FILLER1 PIC X(01) VALUE X'05'.
05 W-CAMPO2 PIC X(10).
05 W-FILLER2 PIC X(01) VALUE X'05'.
:
:
05 W-CAMPO9 PIC X(10).
05 W-FILLER9 PIC X(01) VALUE X'05'.