miércoles, 1 de julio de 2009

Función SORT de DFSORT

SORT es una función del utilitario DFSORT(utilitario de la familia de productos de IBM para usuarios de OS/390), y nos permitirá realizar tareas sencillas y complejas para ordenar datasets.

Función:

SORT FIELDS =(PI, LG, FD, OR)

PI: Inicio de la sección de campos a ordenar
LG: Longitud en bytes de la sección de campos a ordenar
FD: Código de formato de los datos contenidos en la sección de campos a ordenar
OR: Tipo de ordenamiento cuyos posibles valores son A de ascendente y D de descendiente

Tabla de códigos de formato de datos

Formato de dato---------------------> Código
EBCDIC(Cáracter) --------------------->CH
Binario(Numérico) --------------------->BI
Décimal zonado(Numérico)-------------> ZD
Décimal empaquetado(Numérico)------> PD

Para presentar las tareas mas usuales utilizaremos un archivo de trabajo llamado A.DATA


> APPLID(ROSCOE20) USER(XXX,)
> DSN() SCRL FULL COLS 00001 00072 PAU(XXX.SRC)
> A.DATA
> <...+....1....+....2....+....3....+....4....+....5....+....6....+....7..

============================ T O P =============

000001 00012PEDRO BBBB19621023A014010
000002 00011JUAN AAAAA19510115A001000
000003 00014LUIS DDDDD19580519C090111

000004 00013JAIME CCCC19700504B012000

============================ BOTTOM =============
Descripción del archivo:
Desde el byte 01 al 05: Código de persona
Desde el byte 06 al 15: Nombre de persona
Desde el byte 16 al 23: Fecha de nacimiento de persona
Desde el byte 24 al 24: Calificación de persona
Desde el byte 25 al 30: Saldo de la persona

Ordenar el archivo DATA ascendentemente por Código de persona

SORT FIELDS =(01, 05, CH, A)

Se obtiene el siguiente archivo:

> APPLID(ROSCOE20) USER(XXX,)
> DSN() SCRL FULL COLS 00001 00072 PAU(XXX.SRC)
> A.RES
> <...+....1....+....2....+....3....+....4....+....5....+....6....+....7..

============================ T O P =============

000001 00011JUAN AAAAA19510115A001000
000002 00012PEDRO BBBB19621023A014010
000003 00013JAIME CCCC19700504B012000
000004 00014LUIS DDDDD19580519C090111

============================ BOTTOM





1081-

jueves, 4 de junio de 2009

Comandos Básicos en Roscoe

Ilustraremos el uso de los comandos básicos que nos permitirán realizar las tareas mas comunes con nuestro AWS, DSN, JOB o LIB.

Para ello tomaremos como ejemplo el programa básico ABCBPRU que lee un archivo secuencial para explicar las partes que componen un programa Cobol batchero .

> APPLID(ROSCOE20) USER(XXX,)
> AWS() SCRL FULL COLS 00001 00072 PAU(XXX.SRC) A
> <...+....1....+....2....+....3....+....4....+....5....+....6....+....7..

...... ============================ T O P =============

000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
000004 ID DIVISION.
000005 *===========*
000006 PROGRAM-ID. PROBPRU.
000007 AUTHOR. RICHARD PEREZ CENTENO.
000008
000009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI
000016 FILE STATUS IS STAT-DATAOP.
000017
000018 DATA DIVISION.
000019 *=============*
000020 FILE SECTION.
000021 *-------------*
000022
000023 FD DATAOP
000024 LABEL RECORD ARE STANDARD
000025 BLOCK CONTAINS 00 RECORDS.
000026 COPY CPYRPRUE.
000027
000028
000029 WORKING-STORAGE SECTION.
000030 *-----------------------*
000031 77 STAT-DATAOP PIC 9(02) VALUE 0.
000032 77 WS-ERROR PIC 9(02) VALUE 0.
000033
000034 01 VARIOS.
000035 02 W-TOT-SOLES PIC S9(13)V99 COMP-3 VALUE +0.
000036 02 W-TOT-DOLAR PIC S9(13)V99 COMP-3 VALUE +0.
000037
000038 01 WF-FIN-DATAOP PIC 9(01) VALUE 0.
000039 88 FIN-FILE-DATAOP VALUE 1.
000040 77 W-LEIDOS-DATAOP PIC 9(05) VALUE 0.
000041
000042
000043 PROCEDURE DIVISION.
000044 *===================*
000045 PERFORM INICIA.
000046
000047 PERFORM PROCESA THRU PROCESA-FIN UNTIL FIN-FILE-DATAOP.
000048
000049 PERFORM FINALIZA.
000050 *
000051 INICIA.
000052 *======*
000053 DISPLAY '*===============================* '
000054 DISPLAY '*== INICIO PROGRAMA XXXXXXX ==* '
000055 DISPLAY '*===============================* '
000056
000057
000058 MOVE 16 TO RETURN-CODE.
000059
000060 OPEN INPUT DATAOP.
000061
000062 IF STAT-DATAOP NOT EQUAL '00'
000063 DISPLAY '*===============================*'
000064 DISPLAY '** ERROR AL ABRIR ARCHIVOS **'
000065 DISPLAY '*===============================*'
000066 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000067 DISPLAY '*===============================*'
000068 MOVE 1 TO WS-ERROR
000069 PERFORM FINALIZA
000070 END-IF.
000071
000072 PERFORM LEER-DATAOP.
000073
000074 PROCESA.
000075 *=======*
000076 DISPLAY ' PROCESO NRO OPE ' REG-NRO-DOC
000077 PERFORM LEER-DATAOP.
000078
000079 PROCESA-FIN.
000080 *-----------*
000081 EXIT.
000082
000083 FINALIZA.
000084 *--------*
000085 DISPLAY '**LEIDOS ' W-LEIDOS-DATAOP.
000086
000087
000088 CLOSE DATAOP.
000089
000090 IF STAT-DATAOP NOT EQUAL '00'
000091 DISPLAY '*===============================*'
000092 DISPLAY '** ERROR AL CERRAR ARCHIVOS **'
000093 DISPLAY '*===============================*'
000094 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000095 DISPLAY '*===============================*'
000096 MOVE 1 TO WS-ERROR
000097 END-IF.
000098
000099 IF WS-ERROR = 1
000100 MOVE 16 TO RETURN-CODE
000101 ELSE
000102 MOVE 00 TO RETURN-CODE
000103 END-IF
000104
000105 DISPLAY 'FIN DEL PROGRAMA XXXXXXX'
000106
000107 STOP RUN.
000108
000109 LEER-DATAOP.
000110 *------------*
000111 READ DATAOP AT END
000112 MOVE 1 TO WF-FIN-DATAOP.
000113
000114 IF WF-FIN-DATAOP = 0
000115 IF STAT-DATAOP NOT EQUAL '00'
000116 DISPLAY '*============================*'
000117 DISPLAY '** ERROR AL LEER DATAOP **'
000118 DISPLAY '*============================*'
000119 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000120 DISPLAY '*============================*'
000121 MOVE 1 TO WS-ERROR
000122 PERFORM FINALIZA
000123 ELSE
000124 ADD 1 TO W-LEIDOS-DATAOP
000125 DISPLAY '**LEIDOS ' W-LEIDOS-DATAOP
000126 DISPLAY '**WF-FIN-DATAOP ' WF-FIN-DATAOP
000127 END-IF
000128 END-IF.
000129

COMANDO INCL

Localiza y muestra todas las lineas que contienen una cadena especifica.

Ingresas:

incl leer

> APPLID(ROSCOE20) USER(XXX,)
> AWS() SCRL FULL COLS 00001 00072 PAU(XXX.SRC) A
> <...+....1....+....2....+....3....+....4....+....5....+....6....+....7..

Obtienes:

> AWS07 LINES 72 THRU BOTTOM SEARCHED WITH 4 MATCHES
> AWS() SCRL FULL COLS 00001 00072 PAU(XXX.SRC) A
> <...+....1....+....2....+....3....+....4....+....5....+....6....+....7..

000072 PERFORM LEER-DATAOP.
000077 PERFORM LEER-DATAOP.
000109 LEER-DATAOP.
000117 DISPLAY '** ERROR AL LEER DATAOP **'

También tiene otros parametros como el rango de lineas a buscar, y el numero de lineas como resultado que podamos desear.

COMANDO NEXT

Localiza la siguiente ocurrencia de una cadena especifica sobre la data atachada(AWS, DSN,JOB,LIB). Cabe mencionar que posee parametros para indicar el rango de columnas a buscar sobre la data atachada.

Ingresas:

n dataop

> APPLID(ROSCOE20) USER(XXX,)
> AWS() SCRL FULL COLS 00001 00072 PAU(XXX.SRC) A
> <...+....1....+....2....+....3....+....4....+....5....+....6....+....7..

000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
000004 ID DIVISION.
000005 *===========*
000006 PROGRAM-ID. PROBPRU.
000007 AUTHOR. RICHARD PEREZ CENTENO.
000008
000009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI
000016 FILE STATUS IS STAT-DATAOP.
000017
000018 DATA DIVISION.
000019 *=============*
000020 FILE SECTION.
000021 *-------------*

Obtienes:

> APPLID(ROSCOE20) USER(XXX,)
> AWS() SCRL FULL COLS 00001 00072 PAU(XXX.SRC) A
> <...+....1....+....2....+....3....+....4....+....5....+....6....+....7..

000015 SELECT DATAOP ASSIGN TO DATAOPI
000016 FILE STATUS IS STAT-DATAOP.
000017
000018 DATA DIVISION.
000019 *=============*
000020 FILE SECTION.
000021 *-------------*

Otra opción es indicando el rango de columnas a buscar.

Ingresas:

n 40 70 dataop

> APPLID(ROSCOE20) USER(XXX,)
> AWS() SCRL FULL COLS 00001 00072 PAU(XXX.SRC) A
> <...+....1....+....2....+....3....+....4....+....5....+....6....+....7..

000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
000004 ID DIVISION.
000005 *===========*
000006 PROGRAM-ID. PROBPRU.
000007 AUTHOR. RICHARD PEREZ CENTENO.
000008
000009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI
000016 FILE STATUS IS STAT-DATAOP.
000017
000018 DATA DIVISION.
000019 *=============*
000020 FILE SECTION.
000021 *-------------*

Obtienes:

> APPLID(ROSCOE20) USER(XXX,)
> AWS() SCRL FULL COLS 00001 00072 PAU(XXX.SRC) A
> <...+....1....+....2....+....3....+....4....+....5....+....6....+....7..

000016 FILE STATUS IS STAT-DATAOP.
000017
000018 DATA DIVISION.
000019 *=============*
000020 FILE SECTION.
000021 *-------------*

COMANDO DELETE LINEA

Borra una o mas líneas.

El siguiente ejemplo borra una linea especifica

Ingresas:

000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
000004 ID DIVISION.
000005 *===========*
d00006 PROGRAM-ID. PROBPRU.
000007 AUTHOR. RICHARD PEREZ CENTENO.
000008
000009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI

Obtienes:

000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
000004 ID DIVISION.
000005 *===========*
000007 AUTHOR. RICHARD PEREZ CENTENO.
000008
000009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI

El siguiente ejemplo borra un bloque de lineas

Ingresas:

000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
000004 ID DIVISION.
000005 *===========*
d
d0006 PROGRAM-ID. PROBPRU.
000007 AUTHOR. RICHARD PEREZ CENTENO.
000008
dd0009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI

Obtienes:

000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
000004 ID DIVISION.
000005 *===========*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI

El comando DELETE LINE presenta otras opciones como por ejemplo DB que elimina desde la linea indicada hasta la ultima linea, el DU que elimina desde la linea indicada hasta la primera línea, etc.

viernes, 13 de febrero de 2009

Estructura de un prograba Cobol - Batch

Tomaremos como ejemplo un programa que lee un archivo secuencial para explicar las partes que componen un programa Cobol batchero .
Luego pasaremos a explicar cada una de las partes del programa correspondiente.



000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
000004 ID DIVISION.
000005 *===========*
000006 PROGRAM-ID. PROBPRU.
000007 AUTHOR. RICHARD PEREZ CENTENO.
000008
000009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI
000016 FILE STATUS IS STAT-DATAOP.
000017
000018 DATA DIVISION.
000019 *=============*
000020 FILE SECTION.
000021 *-------------*
000022
000023 FD DATAOP
000024 LABEL RECORD ARE STANDARD
000025 BLOCK CONTAINS 00 RECORDS.
000026 COPY CPYRPRUE.
000027
000028
000029 WORKING-STORAGE SECTION.
000030 *-----------------------*
000031 77 STAT-DATAOP PIC 9(02) VALUE 0.
000032 77 WS-ERROR PIC 9(02) VALUE 0.
000033
000034 01 VARIOS.
000035 02 W-TOT-SOLES PIC S9(13)V99 COMP-3 VALUE +0.
000036 02 W-TOT-DOLAR PIC S9(13)V99 COMP-3 VALUE +0.
000037
000038 01 WF-FIN-DATAOP PIC 9(01) VALUE 0.
000039 88 FIN-FILE-DATAOP VALUE 1.
000040 77 W-LEIDOS-DATAOP PIC 9(05) VALUE 0.
000041
000042
000043 PROCEDURE DIVISION.
000044 *===================*
000045 PERFORM INICIA.
000046
000047 PERFORM PROCESA THRU PROCESA-FIN UNTIL FIN-FILE-DATAOP.
000048
000049 PERFORM FINALIZA.
000050 *
000051 INICIA.
000052 *======*
000053 DISPLAY '*===============================* '
000054 DISPLAY '*== INICIO PROGRAMA XXXXXXX ==* '
000055 DISPLAY '*===============================* '
000056
000057
000058 MOVE 16 TO RETURN-CODE.
000059
000060 OPEN INPUT DATAOP.
000061
000062 IF STAT-DATAOP NOT EQUAL '00'
000063 DISPLAY '*===============================*'
000064 DISPLAY '** ERROR AL ABRIR ARCHIVOS **'
000065 DISPLAY '*===============================*'
000066 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000067 DISPLAY '*===============================*'
000068 MOVE 1 TO WS-ERROR
000069 PERFORM FINALIZA
000070 END-IF.
000071
000072 PERFORM LEER-DATAOP.
000073
000074 PROCESA.
000075 *=======*
000076 DISPLAY ' PROCESO NRO OPE ' REG-NRO-DOC
000077 PERFORM LEER-DATAOP.
000078
000079 PROCESA-FIN.
000080 *-----------*
000081 EXIT.
000082
000083 FINALIZA.
000084 *--------*
000085 DISPLAY '**LEIDOS ' W-LEIDOS-DATAOP.
000086
000087
000088 CLOSE DATAOP.
000089
000090 IF STAT-DATAOP NOT EQUAL '00'
000091 DISPLAY '*===============================*'
000092 DISPLAY '** ERROR AL CERRAR ARCHIVOS **'
000093 DISPLAY '*===============================*'
000094 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000095 DISPLAY '*===============================*'
000096 MOVE 1 TO WS-ERROR
000097 END-IF.
000098
000099 IF WS-ERROR = 1
000100 MOVE 16 TO RETURN-CODE
000101 ELSE
000102 MOVE 00 TO RETURN-CODE
000103 END-IF
000104
000105 DISPLAY 'FIN DEL PROGRAMA XXXXXXX'
000106
000107 STOP RUN.
000108
000109 LEER-DATAOP.
000110 *------------*
000111 READ DATAOP AT END
000112 MOVE 1 TO WF-FIN-DATAOP.
000113
000114 IF WF-FIN-DATAOP = 0
000115 IF STAT-DATAOP NOT EQUAL '00'
000116 DISPLAY '*============================*'
000117 DISPLAY '** ERROR AL LEER DATAOP **'
000118 DISPLAY '*============================*'
000119 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000120 DISPLAY '*============================*'
000121 MOVE 1 TO WS-ERROR
000122 PERFORM FINALIZA
000123 ELSE
000124 ADD 1 TO W-LEIDOS-DATAOP
000125 DISPLAY '**LEIDOS ' W-LEIDOS-DATAOP
000126 DISPLAY '**WF-FIN-DATAOP ' WF-FIN-DATAOP
000127 END-IF
000128 END-IF.
000129

EXPLICACION

las lineas que figuran en la parte izquierda son etiquetadas por el editor, en este caso Roscoe.

000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************

De las lineas 1 a la 3 se estila indicar a modo de comentario lo que hace el programa, una descripcion de cada cambia efectuado sobre el mismo.

000004 ID DIVISION.
000005 *===========*
000006 PROGRAM-ID. PROBPRU.
000007 AUTHOR. RICHARD PEREZ CENTENO.
000008

De las lineas 4 a la 8 se puede apreciar el ID DIVISION, y debe ser la primera sección siempre en todo programa COBOL, y contiene el nombre del programa, el autor, la fecha en la que fue escrito, y otra información de interés.

000009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI
000016 FILE STATUS IS STAT-DATAOP.
000017

De las lineas 9 a la 17 se puede apreciar el ENVIRONMENT DIVISION, y se divide a su vez en 1 subsecciones: la Configuration Section y la Input-Output Section.

La Configuration Section es una sección opcional para el programa y describe el entorno del computador sobre la cual el programa escompilado y ejecutado.

En este ejemplo no estamos indicando ninguna descripcion para esta sección.

El Input-Output Section se subdivide en 2 secciones: el File-Control y el I-O-Control.

El File-Control asocia cada archivo en el programa COBOL con una dataset externo al programa, y especifica su organización(Sequencial, Indexado, etc), modo de acceso, y otra información relacionada.

En el ejemplo el archivo DATAOPI es un archivo organizado secuencialmente y estos sólo pueden ser accedidos secuencialmente asi que no es necesario explicitar la organización del archivo ni el modo de acceso. Mas adelante hablaremos de los tipos de archivo y su modo de acceso.

000015 SELECT DATAOP ASSIGN TO DATAOPI

La sentencia SELECT elige un archivo en el programa COBOL y la asocia con un dataset externo indicado en la sentencia ASSIGN

000016 FILE STATUS IS STAT-DATAOP.

la sentencia FILE STATUS monitorea la ejecución de cada operación de entrada salida para el archivo y mueve el valor del estado la operación al data itemindicado, en el ejemplo el data item se llama STAT-DATAOP.


La DATA DIVISION

000018 DATA DIVISION.
000019 *=============*
000020 FILE SECTION.
000021 *-------------*
000022
000023 FD DATAOP
000024 LABEL RECORD ARE STANDARD
000025 BLOCK CONTAINS 00 RECORDS.
000026 COPY ABCRPRUE.
000027
000028
000029 WORKING-STORAGE SECTION.
000030 *-----------------------*
000031 77 STAT-DATAOP PIC 9(02) VALUE 0.
000032 77 WS-ERROR PIC 9(02) VALUE 0.
000033
000034 01 VARIOS.
000035 02 W-TOT-SOLES PIC S9(13)V99 COMP-3 VALUE +0.
000036 02 W-TOT-DOLAR PIC S9(13)V99 COMP-3 VALUE +0.
000037
000038 01 WF-FIN-DATAOP PIC 9(01) VALUE 0.
000039 88 FIN-FILE-DATAOP VALUE 1.
000040 77 W-LEIDOS-DATAOP PIC 9(05) VALUE 0.
000041
000042


De las lineas 18 a la 41 se puede apreciar la DATA DIVISION, y aqui se definen los datos conlos que se trabajara en el progrma. Esta sección esta dividida a su vez en 3 sub secciónescomo son la FILE SECTION, WORKING STORAGE SECTION, y la LINKAGE SECTION.


FILE SECTION

000020 FILE SECTION.
000021 *-------------*
000022
000023 FD DATAOP
000024 LABEL RECORD ARE STANDARD
000025 BLOCK CONTAINS 00 RECORDS.
000026 COPY ABCRPRUE.

De las lineas 20 al 26 se aprecia la FILE SECTION, esta sección define la estructura de losarchivos de datos y para ello se indican se debe indicar la descripción del archivo y la descripción del registro, tambien conocidas como en ingles como File Description Entry y Record Description Entry respectivamente.


FILE DESCRIPTION ENTRY

000023 FD DATAOP
000024 LABEL RECORD ARE STANDARD
000025 BLOCK CONTAINS 00 RECORDS.



La File Description Entry es el nivel de organización mas alto dentro de la File Section y provee información de la estructura fisica del archivo. En el ejemplo esta comprendido por las lineas23 al 25.


RECORD DESCRIPTION ENTRY

000026 COPY ABCRPRUE.

La Record Description Entry describe el registro particular que contiene el archivo particular referido. En el ejemplo esta parte esta comprendido por la linea 26, es decir el copy ABCRPRUECOPY

ABCRPRUE

000001 ****************************************************************
000002 * COPY : ABCRPRUE *
000003 * LONGITUD : 200 CLAVE : 5 *
000004 * DESCRIPC : DATA DE PRUEBA DE OPERACIONES *
000005 *--------------------------------------------------------------*
000006 01 REG-DATA.
000007 03 REG-CONTROL.
000008 * * KEY EN BLANCO PARA REGISTRO DE CONTROL
000009 05 REG-CTL-KEY PIC X(08).
000010 * * NUMERO DE REGISTROS QUE TRAE EL ARCHIVO
000011 05 REG-CTL-NRO-REG PIC X(07).
000012 * * FECHA DE PROCESO 000013 05 REG-CTL-DATE.
000014 07 REG-CTL-DATE-SS PIC X(02).
000015 07 REG-CTL-DATE-YY PIC X(02).
000016 07 REG-CTL-DATE-MM PIC X(02).
000017 07 REG-CTL-DATE-DD PIC X(02).
000018 * * HORA DE PROCESO
000019 05 REG-CTL-TIME PIC X(08).
000020 * * FECHA DE PROCESO ANTERIOR
000021 05 REG-CTL-DATE-ANT.
000022 07 REG-CTL-DATE-SS-ANT PIC X(02).
000023 07 REG-CTL-DATE-YY-ANT PIC X(02).
000024 07 REG-CTL-DATE-MM-ANT PIC X(02).
000025 07 REG-CTL-DATE-DD-ANT PIC X(02).
000026 * * ESPACIO DISPONIBLE
000027 05 REG-CTL-FILLER PIC X(161).
000028 * * DETALLE DE DATA
000029 03 REG-DETALLE REDEFINES REG-CONTROL.
000030 * * NUMERO DE DOCUMENTO
000031 05 REG-NRO-DOC PIC X(05).
000032 * * CODIGO CLIENTE
000033 05 REG-COD-CLIE PIC X(05).
000034 * * CODIGO DE PRODUCTO
000035 05 REG-COD-PROD PIC X(04).
000036 * * DESCRIPCION
000037 05 REG-DESC PIC X(30).
000038 * * MONEDA
000039 05 REG-MONEDA PIC X(01).
000040 * * CANTIDAD
000041 05 REG-CANTIDAD PIC 9(03).
000042 * * IMPORTE UNITARIO
000043 05 REG-IMP-UNIT PIC S9(13)V99 COMP-3.
000044 * * IMPORTE TOTAL
000045 05 REG-IMP-TOTAL PIC S9(13)V99 COMP-3.
000046 * * FECHA
000047 05 REG-FECHA PIC X(08).
000048 * * FILLER
000049 05 REG-FILLER PIC X(128).
000050 *----------------------------------------------------------------*



Este copy viene a indicar la estructura del registro Pueden existir varias descripciones del registro.


WORKING STORAGE SECTION

000029 WORKING-STORAGE SECTION.
000030 *-----------------------*
000031 77 STAT-DATAOP PIC 9(02) VALUE 0.
000032 77 WS-ERROR PIC 9(02) VALUE 0.
000033
000034 01 VARIOS.
000035 02 W-TOT-SOLES PIC S9(13)V99 COMP-3 VALUE +0.
000036 02 W-TOT-DOLAR PIC S9(13)V99 COMP-3 VALUE +0.
000037
000038 01 WF-FIN-DATAOP PIC 9(01) VALUE 0.
000039 88 FIN-FILE-DATAOP VALUE 1.
000040 77 W-LEIDOS-DATAOP PIC 9(05) VALUE 0.
000041



Esta sección describe los registros de datos que no son parte de los archivo de datos peroson utilizados o procesados por el programa durante su ejecución. Aqui tambien se describen los data items que son utilizados como constantes

viernes, 2 de enero de 2009

Leer un Archivo secuencial - Batch

A continuación presentaremos un programa que lee un archivo secuencial y displaya el valor de un campo del archivo leido.

...... ================================ T O P =================================
000001 *****************************************************************
000002 * INFORMACION ACERCA DEL MANTENIMIENTO DEL PROGRAMA *
000003 *****************************************************************
000004 ID DIVISION.
000005 *===========*
000006 PROGRAM-ID. PROBPRU.
000007 AUTHOR. RICHARD.
000008
000009 ENVIRONMENT DIVISION.
000010 *====================*
000011 CONFIGURATION SECTION.
000012 INPUT-OUTPUT SECTION.
000013 FILE-CONTROL.
000014
000015 SELECT DATAOP ASSIGN TO DATAOPI
000016 FILE STATUS IS STAT-DATAOP.
000017
000018 DATA DIVISION.
000019 *=============*
000020 FILE SECTION.
000021
000022 FD DATAOP
000023 LABEL RECORD ARE STANDARD
000024 BLOCK CONTAINS 00 RECORDS.
000025 COPY CPYRPRUE.
000026
000027
000028 WORKING-STORAGE SECTION.
000029 *-----------------------*
000030 77 STAT-DATAOP PIC 9(02) VALUE 0.
000031 77 WS-ERROR PIC 9(02) VALUE 0.
000032
000033 01 VARIOS.
000034 02 W-TOT-SOLES PIC S9(13)V99 COMP-3 VALUE +0.
000035 02 W-TOT-DOLAR PIC S9(13)V99 COMP-3 VALUE +0.
000036
000037 01 WF-FIN-DATAOP PIC 9(01) VALUE 0.
000038 88 FIN-FILE-DATAOP VALUE 1.
000039 77 W-LEIDOS-DATAOP PIC 9(05) VALUE 0.
000040
000041
000042 PROCEDURE DIVISION.
000043 *===================*
000044 PERFORM INICIA.
000045
000046 PERFORM PROCESA THRU PROCESA-FIN UNTIL FIN-FILE-DATAOP.
000047
000048 PERFORM FINALIZA.
000049 *
000050 INICIA.
000051 *======*
000052 DISPLAY '*===============================* '
000053 DISPLAY '*== INICIO PROGRAMA XXXXXXX ==* '
000054 DISPLAY '*===============================* '
000055
000056
000057 MOVE 16 TO RETURN-CODE.
000058
000059 OPEN INPUT DATAOP.
000060
000061 IF STAT-DATAOP NOT EQUAL '00'
000062 DISPLAY '*===============================*'
000063 DISPLAY '** ERROR AL ABRIR ARCHIVOS **'
000064 DISPLAY '*===============================*'
000065 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000066 DISPLAY '*===============================*'
000067 MOVE 1 TO WS-ERROR
000068 PERFORM FINALIZA
000069 END-IF.
000070
000071 PERFORM LEER-DATAOP.
000072
000073 PROCESA.
000074 *=======*
000075 DISPLAY ' PROCESO NRO OPE ' REG-NRO-DOC
000076 PERFORM LEER-DATAOP.
000077
000078 PROCESA-FIN.
000079 *-----------*
000080 EXIT.
000081
000082 FINALIZA.
000083 *--------*
000084 DISPLAY '**LEIDOS ' W-LEIDOS-DATAOP.
000085
000086
000087 CLOSE DATAOP.
000088
000089 IF STAT-DATAOP NOT EQUAL '00'
000090 DISPLAY '*===============================*'
000091 DISPLAY '** ERROR AL CERRAR ARCHIVOS **'
000092 DISPLAY '*===============================*'
000093 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000094 DISPLAY '*===============================*'
000095 MOVE 1 TO WS-ERROR
000096 END-IF.
000097
000098 IF WS-ERROR = 1
000099 MOVE 16 TO RETURN-CODE
000100 ELSE
000101 MOVE 00 TO RETURN-CODE
000102 END-IF
000103
000104 DISPLAY 'FIN DEL PROGRAMA XXXXXXX'
000105
000106 STOP RUN.
000107
000108 LEER-DATAOP.
000109 *------------*
000110 READ DATAOP AT END
000111 MOVE 1 TO WF-FIN-DATAOP.
000112
000113 IF WF-FIN-DATAOP = 0
000114 IF STAT-DATAOP NOT EQUAL '00'
000115 DISPLAY '*============================*'
000116 DISPLAY '** ERROR AL LEER DATAOP **'
000117 DISPLAY '*============================*'
000118 DISPLAY '** STAT-DATAOP : ' STAT-DATAOP
000119 DISPLAY '*============================*'
000120 MOVE 1 TO WS-ERROR
000121 PERFORM FINALIZA
000122 ELSE
000123 ADD 1 TO W-LEIDOS-DATAOP
000124 DISPLAY '**LEIDOS ' W-LEIDOS-DATAOP
000125 DISPLAY '**WF-FIN-DATAOP ' WF-FIN-DATAOP
000126 END-IF
000127 END-IF.
000128
...... ============================= B O T T O M ==============================

A continuación iremos explicando cada una de las partes:




Roscoe para OS/390 - Concepto


¿Y que es Roscoe?

Bueno muchachos, Roscoe viene a ser en palabras más simples un editor, claro que también tiene una definición más completa y correcta que indica que Roscoe es una herramienta de mantenimiento y desarrollo de programas en línea. El hecho es que a través de esta herramienta nosotros podremos administrar y editar nuestro código en cobol, cics, db2.

También existen otras herramientas similares como TSO, pero con el que trabajo y por lo tanto usaré en mis ejemplos será el Roscoe 6.0. Ahora Para darnos una idea de las partes que comprende esta herramienta mencionaremos los siguientes elementos:

El Terminal: es donde tu visualizas la data y ejecutas los comandos Roscoe para la tarea que desees.

El AWS: siglas de Active Works Space, y es el area de trabajo temporal disponible para que ingreses tu texto y la edites.

La Librería CA-Roscoe: área de almacén permanente donde puedes guardas el texto que has estado trabajando sobre el AWS.

Existen muchas comandos Roscoe que nos facilitará nuestro trabajo en cobol cics db2, pero que las veremos mas adelante