Partir ficheros con cabecera.

Todo lo relacionado con JCL, manejo de jobs, etc.
Responder
jcdm

Partir ficheros con cabecera.

Mensaje por jcdm »

Hola compañeros, tengo una duda, quiero partir un fichero en varios... no me es suficiente con el splitby de sort ya que el fichero, debe tener una cabecera, (que es la que marca el número de registros que quiero llevar a más ficheros) ni con el skip ya que el número de registros entre cabecera y cabecera no es igual.

¿Alguien me da una luz?
jcdm

Re: Partir ficheros con cabecera.

Mensaje por jcdm »

Hola nuevamente, perdonad, lo que de momento he hecho es utilizar una condición de sort para ubicar todas mis cabeceras, ahora no sé como cruzarlo con el fichero origial para partirlo en los n ficheros que quiera.

Ni si quiera sé si esto es posible :cry:
qwe2

Re: Partir ficheros con cabecera.

Mensaje por qwe2 »

Yo creo que vas a tener que utilizar el INREC/OUTREC IFTHEN para hacerlo con la opcion GROUPBY posiblemente. Podes hacer un JOIN KEYS para hacer el matcheo por clave y a la salida (o entrada) el IFTHEN.
Busca casos por internet que creo que hay bastantes ejemplos, sino de ultima postea lo que tenes que hacer e intento darte una mano.
jcdm

Re: Partir ficheros con cabecera.

Mensaje por jcdm »

Hola, gracias, en este caso he visto que se generan tantas cabeceras que sería inviable agruparlas por keys, lo que si se me ha ocurrido y no sé si sea posible, es intentar poner un límite de 1gb por ejemplo y cuando llegue al 80% se cierre el fichero y empiece a escribir en otro...
Esto cada vez está peor. :(
qwe2

Re: Partir ficheros con cabecera.

Mensaje por qwe2 »

Si se puede diagramar el proceso se puede programar. Es decir, si son cabeceras fijas, o con una logica particular, se puede hacer por IFTHEN GROUPBY. Ahora, si las cabeceras se generan "medio al azar" ahi mucho no podes hacer. Se entiende a lo que voy?
Por otro lado lo que decis de 1 gb y demas, ya te diria que lo pienses en Cobol, si queres solucionarlo de esa manera. En sort podrias hacer un STOPAFT con la cantidad de registros que vas a tomar. Pero no nos olvidemos que es una cantidad fija.

Teniendo en cuenta todo esto te diria que te pongas a buscar ejemplos de IFTHEN con GROUPBY en internet, ya que eso te daria una idea de lo que se puede hacer con esta instruccion. Si no, quizas lo mejor sea usar otro lenguaje. Pero yo creo que con SORT igual se puede hacer, quizas queda un poco rebuscado a nivel codigo pero hacer se puede hacer.

Saludos :sombrero:
Krobn

Re: Partir ficheros con cabecera.

Mensaje por Krobn »

No entiendo muy bien el problema. detalla un poco mas.

Las cabeceras son siempre las mismas??

las podes descartar y volver a generar con un header3 ???
alexglezquin

Re: Partir ficheros con cabecera.

Mensaje por alexglezquin »

jcdm escribió:Hola nuevamente, perdonad, lo que de momento he hecho es utilizar una condición de sort para ubicar todas mis cabeceras, ahora no sé como cruzarlo con el fichero origial para partirlo en los n ficheros que quiera.

Ni si quiera sé si esto es posible :cry:
Creo entender que el problema está que no conoces la clave por la que dividir cada fichero?
Algo así como que tienes un fichero campo "producto" y no sabes cuales son esos productos por los que "dividir"

Código: Seleccionar todo

SECUENCIA  PRODUCTO   CONTRATO   
7/AN       3/AN       10/AN      
(1-7)      (8-10)     (11-20)    
1--------- 2--------- 3--------- 
         1 100        8918762655 
         2 100        9771662443 
         1 102        9918772674 
         2 102        1182763534 
         3 102        8287366544 
         4 102        7166524431 
         5 102        1882763442 
         1 104        8827365434 
         1 110        9288736545 
         2 110        9918872665 
         3 110        7366454322 
         4 110        6524333121 
         1 120        8726534552 
         2 120        8876672726 
         1 200        8871662553 
---------- ---------- ---------- 
Si ese es el caso con este SORT puedes dividir por producto:

Código: Seleccionar todo

//**********************************************************************
//SPLIT02  EXEC PGM=SORT                                                
//SYSOUT   DD SYSOUT=*                                                  
//SORTIN   DD  DSN=Entrada,                      
//             DISP=SHR                                                 
//OUT01    DD  DSN=Salida1,                      
//             DISP=(,CATLG,DELETE),                                    
//             SPACE=(020,(50,5),RLSE),AVGREC=K,                        
//             LRECL=020,RECFM=FB                                       
//OUT02    DD  DSN=Salida2,                      
//             DISP=(,CATLG,DELETE),                                    
//             SPACE=(020,(50,5),RLSE),AVGREC=K,                        
//             LRECL=020,RECFM=FB                                       
//OUT03    DD  DSN=Salida3,                
//             DISP=(,CATLG,DELETE),                                    
//             SPACE=(020,(50,5),RLSE),AVGREC=K,                        
//             LRECL=020,RECFM=FB                                       
//OUT04    DD  DSN=Salida4,                 
//             DISP=(,CATLG,DELETE),                                    
//             SPACE=(020,(50,5),RLSE),AVGREC=K,                        
//             LRECL=020,RECFM=FB                                       
//SYSIN    DD *                                                         
  SORT FIELDS=COPY                                                      
  OUTREC IFTHEN=(WHEN=GROUP,KEYBEGIN=(8,3),PUSH=(21:ID=1))              
  OUTFIL FNAMES=OUT01,BUILD=(1,20),INCLUDE=(21,1,ZD,EQ,1)               
  OUTFIL FNAMES=OUT02,BUILD=(1,20),INCLUDE=(21,1,ZD,EQ,2)               
  OUTFIL FNAMES=OUT03,BUILD=(1,20),INCLUDE=(21,1,ZD,EQ,3)               
  OUTFIL FNAMES=OUT04,BUILD=(1,20),INCLUDE=(21,1,ZD,GE,4)               
/*                                                                      
//**********************************************************************
Responder