Вы находитесь на странице: 1из 5

22/10/2017 Mi primer programa de cruce. Cruce 1-1.

- Consultorio Cobol

Más Siguiente blog» cesarquispe01de@gmail.com Escritorio Cerrar sesión

Consultorio COBOL DB2 JCL REXX ...Y MAS PRINCIPIANTES El equipo Padrinos Contacto LIBROS

Buscar

MARTES, 2 DE NOVIEMBRE DE 2010 SIGUENOS EN INTERNET

Mi primer programa de cruce. Cruce 1-1.


El programa de cruce de ficheros más sencillo es el denominado 1-1. Esto significa que el
¿Y no será que en este mundo hay cada vez más
valor de los campos que vamos a comparar sólo estará una vez en cada fichero.
gente y menos personas? - Mafalda

El campo de comparación se suele llamar "campo clave" o simplemente "clave". Este


campo clave existirá en ambos ficheros y tendrá el mismo formato (PIC) en ambos. De no AMIGOS DEL CONSULTORIO
ser así tendríamos que formatear uno de ellos para que coincidan los formatos.

OJO! los ficheros de un programa de cruce siempre vendrán ordenados por el campo clave.

JCL:

COBOLEROS
//******************************************************
//******************** BORRADO *************************
//BORRADO EXEC PGM=IDCAMS COMPARTE CONOCIMIENTO
//SYSPRINT DD SYSOUT=*
Envía tu artículo, noticia o manual relacionado con
//SYSIN DD *
nuestro mundillo y si es elegido lo publicaremos en el
DEL FICHERO.ENTRADA1.ORDENADO
consultorio.
DEL FICHERO.ENTRADA2.ORDENADO
DEL FICHERO.SALIDA.CRUCE consultoriocobol@gmail.com
SET MAXCC = 0
//******************************************************
//* ORDENAMOS EL FICHERO ENTRADA1 POR CLAVE *********
//SORT01 EXEC PGM=SORT
//SORTIN DD DSN=FICHERO.ENTRADA1,DISP=SHR
//SORTOUT DD DSN=FICHERO.ENTRADA1.ORDENADO, APADRINA UN MANUALES
PICADOR
// DISP=(,CATLG),SPACE=(TRK,(50,10))
Principiantes
//SYSOUT DD SYSOUT=* COBOL
//SYSPRINT DD SYSOUT=* Ir a Padrinos Principiantes PL/I
//SYSIN DD *
SORT FIELDS=(1,1,CH,A)
//****************************************************** ZONA DESCARGAS LISTADOS DE
ERRORES
//* ORDENAMOS EL FICHERO ENTRADA2 POR CLAVE ********* Descárgate nuestra
//SORT01 EXEC PGM=SORT App para Android Errores de JCL
//SORTIN DD DSN=FICHERO.ENTRADA2,DISP=SHR Errores DB2
//SORTOUT DD DSN=FICHERO.ENTRADA2.ORDENADO, Errores de ficheros
// DISP=(,CATLG),SPACE=(TRK,(50,10)) Errores de sistema
//SYSOUT DD SYSOUT=*
Errores IMS
//SYSPRINT DD SYSOUT=*
Errores CICS
//SYSIN DD *
Oncodes PL/I
SORT FIELDS=(1,1,CH,A)
//******************************************************
//*********** EJECUCION DEL PROGRAMA PRUEBA7 *********** ARCHIVO DEL BLOG
//PROG4 EXEC PGM=PRUEBA7
//SYSOUT DD SYSOUT=* RECIBE LAS noviembre 2010 (6)
ACTUALIZACIONES
//FICHERO1 DD DSN=FICHERO.ENTRADA1.ORDENADO,DISP=SHR DEL CONSULTORIO!
//FICHERO2 DD DSN=FICHERO.ENTRADA2.ORDENADO,DISP=SHR
Subscríbete al
//SALIDA DD DSN=FICHERO.SALIDA.CRUCE,
Consultorio Cobol por
// DISP=(NEW, CATLG, DELETE),SPACE=(TRK,(50,10)),
Email
// DCB=(RECFM=FB,LRECL=1)
/*
SEGUIDORES
Programa: Seguidores (130) Siguiente
La base del proceso de un programa de cruce es la comparación de las claves:

3000-PROCESO.

EVALUATE TRUE
WHEN CLAVE1 = CLAVE2
(...)
WHEN CLAVE1 < CLAVE2 Seguir
(...)
WHEN CLAVE1 > CLAVE2
(...)

http://www.consultoriocobol.com/2010/11/mi-primer-programa-de-cruce.html 1/5
22/10/2017 Mi primer programa de cruce. Cruce 1-1. - Consultorio Cobol
END-EVALUATE
.

En cada WHEN pondremos el código de lo que queremos hacer. Por ejemplo, cuando las
claves coincidan, escribiremos un registro en un fichero de salida.

EVALUATE TRUE
WHEN CLAVE1 = CLAVE2
PERFORM ESCRIBE-SALIDA-CRUCE
PERFORM LEER-FICHERO1
PERFORM LEER-FICHERO2
WHEN CLAVE1 < CLAVE2
DISPLAY 'CLAVE1 NO EXISTE EN FICHERO2'
PERFORM LEER-FICHERO1
WHEN CLAVE1 > CLAVE2
DISPLAY 'CLAVE2 NO EXISTE EN FICHERO1'
PERFORM LEER-FICHERO2
END-EVALUATE
.

Este proceso se repetirá X veces dependiendo del tratamiento que queramos hacer:
1.Proceso hasta final del fichero 1: cuando queremos tratar todos los registros del fichero
1, existan o no en el fichero 2.
2.Proceso hasta final del fichero 1 y final del fichero 2: cuando queremos tratar todos
los registros de los 2 ficheros. Esto incluye los registros comunes a ambos ficheros, los
registros del fichero 1 que no están en el fichero 2 y los registros del fichero 2 que no están
el fichero 1.
3.Proceso hasta final del fichero 1 o final del fichero2: cuando sólo queremos tratar los
registros coincidentes. En el momento en que uno de los ficheros se termine, no
volveremos a tener claves coincidentes por lo que no tiene sentido continuar la ejecución.

Para verlo más claro pongamos un ejemplo:

En el INICIO del programa, leeremos el primer registro de cada fichero e informaremos los
campos CLAVE1 y CLAVE2:

1000-INICIO.

PERFORM LEER-FICHERO1
PERFORM LEER-FICHERO2
.

Donde:
LEER-FICHERO1.

READ FICHERO1 INTO WX-ENTRADA1

EVALUATE FS-FICHERO1
WHEN ZEROES
MOVE WX-ENTRADA1 TO CLAVE1
WHEN 10
SET FIN-FICHERO1 TO TRUE
WHEN OTHER
PERFORM 3000-FINAL
END-EVALUATE
.

LEER-FICHERO2.
Lo mismo que para Fichero1.

Después de la primera lectura:


CLAVE1 = 1; CLAVE2 = 1.

Repetiremos el proceso hasta llegar al final de alguno de los 2 ficheros.


PERFORM 3000-PROCESO
UNTIL FIN-FICHERO1
OR FIN-FICHERO2

http://www.consultoriocobol.com/2010/11/mi-primer-programa-de-cruce.html 2/5
22/10/2017 Mi primer programa de cruce. Cruce 1-1. - Consultorio Cobol

a) CLAVE1 = CLAVE2:
Escribimos en el fichero de salida:
ESCRIBIR-SALIDA-CRUCE.
MOVE CLAVE1 TO WX-SALIDA

WRITE REG-SALIDA FROM WX-SALIDA

IF FS-SALIDA-OK
INITIALIZE WX-SALIDA
ELSE
DISPLAY 'ERROR EN WRITE DEL FICHERO:'FS-SALIDA
END-IF
.

Leemos el siguiente registro del fichero 1: PERFORM LEER-FICHERO1


CLAVE1 = 2.
Leemos el siguiente registro del fichero 2: PERFORM LEER-FICHERO2
CLAVE2 = 3.

b) CLAVE1 < CLAVE2:


Esto significa que la CLAVE1 no existe en el fichero 2.
Leemos el siguiente registro del fichero 1: PERFORM LEER-FICHERO1
CLAVE1 = 5.

c) CLAVE1 > CLAVE2:


Esto significa que la CLAVE2 no existe en el fichero 1.
Leemos el siguiente registro del fichero 2: PERFORM LEER-FICHERO2
CLAVE2 = 5.

El tratamiento que hagamos en cada uno de los casos es indiferente para el proceso de
cruce. Lo importante es el orden en el que leemos los ficheros.

Para terminar vamos a ver como serían las lecturas en caso de que el proceso se repita
hasta final de los dos ficheros:
LEER-FICHERO1.
READ FICHERO1 INTO WX-ENTRADA1

EVALUATE FS-FICHERO1
WHEN ZEROES
MOVE WX-ENTRADA1 TO CLAVE1
WHEN 10
SET FIN-FICHERO1 TO TRUE

MOVE HIGH-VALUES TO CLAVE1


WHEN OTHER
PERFORM 3000-FINAL
END-EVALUATE
.

LEER-FICHERO2.
Lo mismo que para Fichero1.

Como podéis ver hemos informado la clave con HIGH-VALUES. Esto significa que cuando
finalize el fichero1, la CLAVE1 va a ser siempre mayor que la clave 2, y en el EVALUATE
donde comparamos las claves, siempre entrará por el tercer WHEN.
Una vez leido todo el fichero1, el programa seguirá ejecutándose leyendo del fichero2,
hasta que éste también finalice.

Y ya está, nuestro primer programa de cruce está listo : )

Reacciones: Util (8) Interesante (2) Guay (0)

Publicado por Tallian

Etiquetas: COBOL, cruce, matching, Tallian

13 comentarios:
Álvaro dijo...
Hola. Por fin alguien crea un foro decente de cobol en este país. Otros no entran al
detalle en los programas y solo se dedican a las sentencias básicas de cobol, y eso
ayuda poco.
Chapó por el blog!!
16 de noviembre de 2010, 20:14

carlos dijo...
muy interesante estudie esto hace 20 años, y la verdad es q no recuerdo nada, un
refresco a la memoria siempre biene bien. pero creeis de la utilidad, y o aplicación del
cobol al dia de hoy......?

http://www.consultoriocobol.com/2010/11/mi-primer-programa-de-cruce.html 3/5
22/10/2017 Mi primer programa de cruce. Cruce 1-1. - Consultorio Cobol
19 de agosto de 2011, 11:04

Anónimo dijo...
JODEIS HERMANOS EN MEXICO SE OCUPA MUCHO EL COBOL GRACIAS TIOS
POR ESTA AYUDA
19 de agosto de 2011, 20:44

Tallian dijo...
@Anónimo: de nada! Intentamos echar una mano a los compañeros de profesión : )

@carlos: hoy día se sigue utilizando en la mayoría de bancos/cajas. He pasado por


unos cuantos y si no es COBOL, es PL/I. Y hay demanda de profesionales, no hay más
que ver el artículo que publicamos sobre el mercado laboral en España en el mundillo
de la programación (http://www.consultoriocobol.com/2011/04/estudio-del-mercado-
laboral-espanol.html) : )
Y esperemos que aguante muchos años más! jaja
25 de agosto de 2011, 20:45

Anónimo dijo...
carlos tu as buscado trabajo alguna vez de cobol?jeje sobra
21 de diciembre de 2011, 14:02

Anónimo dijo...
Hola el mapa epidemiologico de hambre - obesidad - 12423 enfermedades CIE-xx -
control de inmunizacion y en total 19 observatorios esta construido en Cobol - wow vea
imagenes
Imagenes de Software MapaSoft-Sisdinutri

http://www.mapadehambre.com/e-pantallas.HTM
2 de noviembre de 2012, 21:34

Anónimo dijo...
necesito una ayuda tengo un archivo plano y necesito convertir los decimales a comp-3
se que debo hacerlo en cobol me prodrian ayudar
2 de enero de 2013, 19:03

Anónimo dijo...
Ola, boa noite!
Parabens pelo seu site, estive olhando ele como um todo.
Tambem tenho um site de cobol e mais coisas:
www.cadcobol.com

Um grande abraço.

DORNELLES Carlos Alberto


Analista de Sistemas Senior
Indra Company
Brasilia - DF - Brasil
15 de mayo de 2013, 23:43

Loboc dijo...
Gracias Dornelles! Un saludo.
17 de mayo de 2013, 14:36

Tallian dijo...
Información muy interesante en www.cadcobol.com
Para los gallegos es bastante fácil de entender :P

Bo traballo!
16 de junio de 2013, 11:00

Marcos Hernán García dijo...


Todo esto se puede hacer en un solo paso con un sort usando joinkeys. Y te admite full
joins.
28 de febrero de 2014, 19:57

basura cibernetica dijo...


hace falta un compilador, cual recomiendas y si lo puedes proporcionar por favor.
basuracibernetic@gmail.com
1 de julio de 2015, 23:03

Azael Gonzalez Martinez dijo...

http://www.consultoriocobol.com/2010/11/mi-primer-programa-de-cruce.html 4/5
22/10/2017 Mi primer programa de cruce. Cruce 1-1. - Consultorio Cobol
muy buen aporte para este tipo de cruce!!
29 de noviembre de 2016, 21:09

Introduce tu comentario...

Comentar como: Shiinx Designe Cerrar sesión

Publicar Vista previa Avisarme

Entrada más reciente Página principal Entrada antigua

Suscribirse a: Enviar comentarios (Atom)

ETIQUETAS

.NET 1-1-1 100 años 11 del 11 de 2011 2012 360 System 9 del 9 de 1999 AAAADDD AAAAMMDD abend Accenture ACCEPT Acciona Transmediterranea actualizaciones acuerdo tecnológico ADABAS
ADD Adecco Alba Technology Alberto Larraz Alcalá de Henares alinear alnova alocar altair altamira Alvarito android Ángel Martínez Navarro Anova IT AnyHelp App Apple Aragón arquitectura ASA
ASCC asignatura asta AVG b37 Banco Espirito Santo Banco Popular Banco Sabadell Banco Santander Bankia Bankinter Barcelona BATCH BBK BBVA Besaide Bill Miller Biología BMC Software BMV
BNDS Bolsa Mexicana de Valores BOOKMARKS borrar ficheros BPXWDYN Bull busquedas C/C++ cabecera Caixa Galicia CaixaBank Caja de Guadalajara Caja Sur Cajasol CALL canon google

canonAEDE Cantabria capitalización bursátil carnaval carnicas cátedra CCMI CEDA CEMT CHANGE checKing QA CICS ciudades Clerity Solutions cloud cloud computing CMMI 5 COBOL Cobol
.Net Cobol-CICS-DB2 código eficiente codigos cola entrada cola salida colas colas da colas st comandos TSO COMMIT comp comp-3 Compaq comparar ficheros COMPARE compilador Compuware
concurso Concurso Visual Cobol cond Conferencia de Desarrolladores consultas consultiras consultora Gartner contrato COPY CORRELATION COS costes costo COUNT COUNT_BIG
COVARIANCE CPD cpu% cruce CURSOR Customer Information Control System cylinder DATA DATE DAY DB2 DCB DD DDMMAAAA DDNAME debian declare Deep Blue DEGREES delay DELETE
Deloitte DEPENDING ON desarrolladores despidos dest deuda TI DINAMICA dinámica DISPLAY DIV division DLm6000 DO DO WHILE DSN DSNAME dudas DUMMY duplicados DYNAMNB
DYNAMNBR easytrieve edicion editados editor EDPE efecto 2000 ejecucion ejemplo El Corte Inglés else embargo EMC Emilio Botín emple empleo encuesta ENDBR Enrique Muñoz entornos híbridos
EPS ERE errores EspacioMonzón espacios espera estadisticas estática EVALUATE EXEC EXEC CICS externalización facturación fecha DB2 fechas felicidad Fichero ficheros FILE file-status
fill FILLER filtrar Fin FinancialTech FIND Físicas FOR FORMATO FTP FUNCTION REVERSE fusión fusión servicios centrales futuro Gary Kasparov GDG generacional GET gnu cobol GOBACK grabar en
fichero Grace Murray Hopper gratis gregoriana Heirloom Computing HEXLOC host HP HTML IBM IBM Websphere ICETOOL IDCAMS IDE IEBGENER IEFBR14 if IF THEN IFTHEN IMS INCLUDE index
INDEXED BY indices infojobs informatica informática móvil inner INPUT INREC INSERT INSPECT integración IS NUMERIC ISO 27001 ISRSUPC J2EE Java Java/J2EE JCL JES JES2 JFY JOB
JOBLIB JOIN juliana justify katherine neville keys kmp Kutxabank lecturas left Libros limite LINE Linux LISTADO LMMLIST lo mas leido LOAD Loboc longitud variable LPI LRECL Luis Krug
Madrid mainframe Mainframe Transformation manual Mapfre Marcel Rafart Vicent market mascaras Master the mainframe matching Matemáticas MAX max-rc MAXCC máximos Medio Cudeyo
mercado MERGE Micro Focus Micro Focus Test Server Microsoft migración Miguel Fito MIN MONTH mOSAIC move móviles msgclass MTC MTP MUL MVS MySQL natural Nauta Capital

Noticias notify novatos nube NUM STD COB ofertas OFFSET OMIT ONLINE opencobol operaciones ficheros optimización Optimyth Software oracle ordenar OUTFIL OUTLIM OUTREC
outsourcing OVERLAY owner paises paro parse pepegan perform personal communications PGM PHP PISTA. CILINDRO Pl-SQL plan de estudios pli precios prefix preguntas principiantes
PRINT PROCEDURE procesadores especializados procesos por lotes PROCLIB programa programador purgar PUT QMF query Químicas QUIT RADIANS Rafael Achaerandio Randstad Rational Clear
REXX right
Case Raúl Gómez Martínez Razón READ READNEXT rearranque RECEIVE reclu-it record Red Hat REDEFINES REGION rellenar REMICS Renfe REPORT respuestas restart REWRITE
RITSI Rod Adkins ROWSET RUN S0C7 Sap SCAN SCM SDSF SEARCH section secuencial SELECT SELECT MAX semana SEND SEQNUM SEQUENCE SER SGX SIN Singapur sistema
sistemas sistemas informáticos SIVER SKIPREC slqcode software inteligentes Sogeti SORT SPACE SPLICE SQL SQLCODE STARTBR STDDEV STEPLIB STOPAFT stream STRING STROBE Stuart
McGill SUB subscripciones sueldo SUM SUM FIELDS Sun superce supercomputación SUSE SYSCOLUMNS SYSCOLUMS SYSDUMP SYSEXEC SYSIN SYSINDEXES sysname SYSOUT
SYSPRINT SYSTABLES System Z sysuid Tallian TALLYING TAN tasas TASK teclado Tecnalia THEN THRU TI TIC Ticjob TIER TIME PARM TIMESTAMP trabajo track Trafuga transaccion Tres
Cantos trigonometría TSO Tuxedo UAM UniKix union universidad unix UNLOAD UNNUM until UP BY UPDATE UTF-8 utilidades validar alfanumérico Vanson Bourne VARCHAR variables VARIANCE
Vasco VASS VB vCOBOL visitas Visual Cobol R3 VMware VSAM VTL wait WEEK while Windows Windows Server x64 wiseri Workbench write XML XX YEAR z/Os zEnterprise Zurich

Contenido bajo licencia Creative Commons.

Iconos dino de fasticondesign

Con la tecnología de Blogger.

http://www.consultoriocobol.com/2010/11/mi-primer-programa-de-cruce.html 5/5

Вам также может понравиться