Gracias Rui Pinto (Rapinto)
COBOL Foro
Foro dedicado a COBOL, a la Programación y a la Informática.
Retroceder   COBOL Foro > IDE-s y compiladores COBOL > IBM Enterprise COBOL > JCL y utilidades
JCL y utilidades Job Control Lenguage, DFSORT, IEBGENER, IDCAMS...
Comunicados
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Compilador] Copiar Colar (Copy and Paste) diegodm PowerCOBOL y COM/OLE 1 27 de noviembre de 2020 18:38
[Sintaxis] Leer último registro jmeza Fujitsu COBOL 9 11 de mayo de 2020 13:38
[Compilador] Copiar / colar em aplicações powercobol LUIZ ANTONIO DE OLIVEIRA PowerCOBOL (ActiveX, v4 - v11) 5 15 de marzo de 2019 03:24
[Sintaxis] Ordenar fichero con comando Sort Begoguay PowerCOBOL (ActiveX, v4 - v11) 4 14 de noviembre de 2016 09:43
[Información] Registro encontrado Dasije WinDev 0 7 de agosto de 2016 19:55
Respuesta
 
Herramientas

  #1
Antiguo 22 de abril de 2021, 12:37
IDENTIFICATION DIVISION
SwimPiii
Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de SwimPiii
DATA DIVISION
Forero desde (Registrado)abril 2021
España
Última Actividad26.04.2021 20:45
PROCEDURE DIVISION
PostsPosts: 3
Ha dicho GraciasEnviado: 0
Ha recibido agradecimientosRecibido: 0
Mejores respuestasSoluiones: 1
ReputaciónReputación: 0
SwimPiii is an unknown quantity at this point
Consola SORT - colar datos registro precedente

Buenos días Coboleros,

Tengo la siguiente duda respecto a si es posible o no realizar lo siguiente:

Partiendo de un fichero de entrada A, cuyo formato es: tipo registro (2) + datos (n) + ID (10)

Entrada
Código:
01.....0000000001
01.....0000000002
01.....0000000003
02.....0000000000
02.....0000000000
01.....0000000004
02.....0000000000
Quisiera poder conseguir un fichero B con el siguiente formato:

Salida
Código:
01.....0000000001 0000000001
01.....0000000002 0000000002
01.....0000000003 0000000003
02.....0000000000 0000000003
02.....0000000000 0000000003
01.....0000000004 0000000004
02.....0000000000 0000000004
El sentido de esto es que necesito que los registros cuyo tipo sea distinto de '01', lleven al final el ID de su tipo de registro '01' anterior. Es como si los '02' estuvieran "englobados" en los tipo '01'.

No sé si esto se puede hacer con un paso de SORT, ICETOOL o herramienta similar. Sabría abordarlo con Easytrieve, pero estoy intentando aprender algo nuevo sobre SORT.

Mil gracias de antemano a todos!

Un saludo!
SwimPiii no ha iniciado sesión   Responder Con Cita
  #2
Antiguo 22 de abril de 2021, 23:53
IDENTIFICATION DIVISION
JCantero
Novato Senior
ENVIRONMENT DIVISION
Avatar de JCantero
DATA DIVISION
Forero desde (Registrado)junio 2016
España
Ubicación Albacete
Edad54 años
Última Actividad12.05.2021 22:28
PROCEDURE DIVISION
PostsPosts: 174
Ha dicho GraciasEnviado: 50
Ha recibido agradecimientosRecibido: 115
Mejores respuestasSoluiones: 8
ReputaciónReputación: 16
JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road
Predeterminado

Para el ejemplo que has puesto si no he entendido mal, no hace falta un sort

La fd del fichero entrada:

Código COBOL:
  1.            01 reg-entrada.
  2.                02 id-e pic xx.
  3.        * suponiendo que n = 40
  4.                02 datos-e pic x(40).
  5.                02 cadena1-e pic x(10).

La fd del fichero salida:
Código COBOL:
  1.            01 reg-salida.
  2.                02 id-s pic xx.
  3.        * suponiendo que n = 40
  4.                02 datos-s pic x(40).
  5.                02 cadena1-s pic x(10).
  6.                02 cadena2-s pic x(10).

La variable de working cadena tendria el ultimo leido
y fs- entrada file status del fichero entrada

Código COBOL:
  1.            01  cadena pic x(10).
  2.            02 fs-entrada            pic xx.
  3.               88 esta-entrada             value '00' '02'.
  4.               88 n-esta-entrada           value '23'.
  5.               88 fin-entrada              value '46'  '10'.
  6.               88 bloqueado-entrada        value '99' '90'.
  7.               88 f-bloqueado-entrada      value '38' '93'.
  8.               88 f-noexiste-entrada       value '35'.

Y ya un bucle para leer el fichero entrada hasta el final

Código COBOL:
  1.                   open input entrada
  2.                   open output salida
  3.                   initialize reg-entrada
  4.                   move '0000000000' to cadena
  5.                   read entrada next record  end-read
  6.                   perform until fin-entrada
  7.                       initialize reg-salida
  8.                       move reg-entrada to reg-salida
  9.                       if id-e = '01' then
  10.                            move cadena1-e to cadena
  11.                       end-if
  12.                       move cadena to cadena2-s
  13.                       write reg-salida end-write
  14.                       initialize reg-entrada
  15.                       read entrada next record  end-read
  16.                   end-perform.
  17.                   close entrada salida.
  18.        

Esto es salvo error u omision, Pero eso seria la idea
JCantero no ha iniciado sesión   Responder Con Cita
  #3
Antiguo 23 de abril de 2021, 09:40
IDENTIFICATION DIVISION
SwimPiii
Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de SwimPiii
DATA DIVISION
Forero desde (Registrado)abril 2021
España
Última Actividad26.04.2021 20:45
PROCEDURE DIVISION
PostsPosts: 3
Ha dicho GraciasEnviado: 0
Ha recibido agradecimientosRecibido: 0
Mejores respuestasSoluiones: 1
ReputaciónReputación: 0
SwimPiii is an unknown quantity at this point
Predeterminado

Muchas gracias por tu respuesta!

No, la cuestión es que debería hacerlo mediante la herramienta SORT, para evitar la subida de programas COBOL.

¿Se os ocurre cómo?

Un saludo y mil gracias!
SwimPiii no ha iniciado sesión   Responder Con Cita
  #4
Antiguo 23 de abril de 2021, 11:33
IDENTIFICATION DIVISION
JCantero
Novato Senior
ENVIRONMENT DIVISION
Avatar de JCantero
DATA DIVISION
Forero desde (Registrado)junio 2016
España
Ubicación Albacete
Edad54 años
Última Actividad12.05.2021 22:28
PROCEDURE DIVISION
PostsPosts: 174
Ha dicho GraciasEnviado: 50
Ha recibido agradecimientosRecibido: 115
Mejores respuestasSoluiones: 8
ReputaciónReputación: 16
JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road JCantero is on a distinguished road
Predeterminado

"para evitar la subida de programas COBOL." ?

No entiendo lo que dices. Desarrolla el objetivo del fichero de salida.

Si deseas utilizar "sort" seria un bucle parecido cambiando el write por release y luego realizar un bucle de lectura con return. Ademas meter un criterio de oden que no acabo de entender.

Lo quieres hacer en cobol, en un script .bat (windows), script en linux, c, php, java, js, .... ?
JCantero no ha iniciado sesión   Responder Con Cita
  #5
Antiguo 26 de abril de 2021, 10:08
IDENTIFICATION DIVISION
SwimPiii
Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de SwimPiii
DATA DIVISION
Forero desde (Registrado)abril 2021
España
Última Actividad26.04.2021 20:45
PROCEDURE DIVISION
PostsPosts: 3
Ha dicho GraciasEnviado: 0
Ha recibido agradecimientosRecibido: 0
Mejores respuestasSoluiones: 1
ReputaciónReputación: 0
SwimPiii is an unknown quantity at this point
Predeterminado

Buenas,

Lo que estoy intentando es, mediante la herramienta SORT (o ICETOOL o ICEMAN), en un paso de JCL, obtener el fichero de salida a partir del de entrada.

La dificultad recae en que necesito que los registros '02' lleven la referencia correcta. Dicha referencia correcta es la perteneciente al registro '01' anterior. Pero claro, pueden existir 'n' registros 02 pertenecientes al mismo 01.

Cito otro ejemplo

Entrada

01.....0000000001
01.....0000000002
01.....0000000003
02.....0000000000
02.....0000000000
02.....0000000000
01.....0000000004
02.....0000000000
02.....0000000000
01.....0000000005
02.....0000000000
02.....0000000000
02.....0000000000
02.....0000000000

Salida

01.....0000000001 0000000001
01.....0000000002 0000000002
01.....0000000003 0000000003
02.....0000000000 0000000003
02.....0000000000 0000000003
02.....0000000000 0000000003
01.....0000000004 0000000004
02.....0000000000 0000000004
02.....0000000000 0000000004
01.....0000000005 0000000005
02.....0000000000 0000000005
02.....0000000000 0000000005
02.....0000000000 0000000005
02.....0000000000 0000000005

Muchas gracias!

Un saludo
SwimPiii no ha iniciado sesión   Responder Con Cita
  #6
Antiguo 26 de abril de 2021, 10:35
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)diciembre 2014
España
Ubicación Madrid
Edad36 años
Última Actividad12.05.2021 15:11
PROCEDURE DIVISION
PostsPosts: 1.734
Ha dicho GraciasEnviado: 540
Ha recibido agradecimientosRecibido: 711
Mejores respuestasSoluiones: 93
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

@SwimPiii, no puedes hacerlo con SORT. Debes pasar por ICETOOL, echale un ojo a la documentación del mismo y busca GROUP.
ICETOOL es una herramienta hiperpoderosa, pero un tanto compleja.

Mira este ejemplo, para darte una idea: [Sintaxis] ICETOOL - un ejemplo batsante potente - COBOL Foro

Sobre todo esta parte:
Código JCL:
  1. OUTREC IFTHEN=(WHEN=GROUP,
  2.     BEGIN=(51,1,ZD,EQ,0),
  3.     END=(51,1,ZD,EQ,6),
  4.     PUSH=(7:52,17))

Si lo quieres hacer por herramienta IBM si o si, no te queda otra.

Lo que se podría hacer tambien es via varios steps de SORT, pero sería más bien una chapuza, aunque funcionar funcionaría, yo creo.

Llevo tiempo sin tocar el JCL



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
Respuesta

Tags
acumular , group , icetool , sort


Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes)
 
Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado



La franja horaria es GMT +1. Ahora son las 07:13.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2021, Jelsoft Enterprises Ltd.