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:




No hay comentarios:

Publicar un comentario