Gracias Rui Pinto (Rapinto)
COBOL Foro
Foro dedicado a COBOL, a la Programación y a la Informática.
  COBOL Foro > IDE-s y compiladores COBOL > IBM Enterprise COBOL
IBM Enterprise COBOL COBOL bajo z/OS, OS/400 (Mainframes)
Comunicados
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Actualizar campo en una hoja de Excel orlando PowerCOBOL (ActiveX, v4 - v11) 1 17 de noviembre de 2019 20:57
[Herramienta] Nombre de Ordenador Recato53 PowerCOBOL (ActiveX, v4 - v11) 3 9 de octubre de 2019 10:28
[Sintaxis] Nombre de proyecto o Dll Recato53 PowerCOBOL (ActiveX, v4 - v11) 1 9 de diciembre de 2017 10:23
[Información] Reducir tamaño campo Gatomalo RM/COBOL 4 24 de noviembre de 2017 03:30
[Información] Tamaño de campo Josber PowerFORM 2 16 de diciembre de 2015 18:47
Respuesta
 
Herramientas

  #1
Antiguo 8 de junio de 2020, 12:46
IDENTIFICATION DIVISION
Alberto
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de Alberto
DATA DIVISION
junio 2020
19.05.2021 11:46
PROCEDURE DIVISION
Posts: 5
Enviado: 2
Recibido: 0
Soluiones: 0
Reputación: 0
Alberto is an unknown quantity at this point
Predeterminado Nombre de campo dentro de variable.

Hola, necesito ayuda con algo un tanto complejo, por lo menos para mi.

Imaginemos que tenemos una copy, que es una copy de una tabla db2 y tiene campos de todo tipo.

Código COBOL:
  1. 01 COPY-TABLA-DB2.
  2.  05 CAMPO1-COPY-TABLA    PIC X(10).
  3.  05 CAMPO2-COPY-TABLA    PIC 9(9).
  4.  05 CAMPO3-COPY-TABLA    PIC 9(8) COMP-3.

Ahora imaginemos que tenemos una variable auxiliar, W-AUX PIC X(20), en dicha variable voy a almacenar el nombre de un campo de la copy.

Es decir, el valor de W-AUX, sera (por ejemplo) 'CAMPO1-COPY-TABLA'

Me gustaria saber si de alguna manera es posible hacer dos cosas:

1) Saber el tamaño (longitud) del campo que contiene la variable W-AUX. En nuestro ejemplo la respuesta tendria que ser 10, pues la variable W-AUX contiene el nombre del campo CAMPO1-COPY-TABLA. No pregunto por el tamaño de la variable W-AUX!! sino del campo cuyo nombre esta dentro de la variable W-AUX.

2) Si puedo asignar valor al campo CAMPO1-COPY-TABLA a partir de la varible W-AUX.
Es decir:

MOVE '123' TO 'contenido de W-AUX', se mueve '123' realmente al campo CAMPO1-COPY-TABLA, no a W-AUX.

Muchas gracias

Quizas no me halla expresado bien, si no se entiende, me decis y lo pongo de otra manera.
Alberto no ha iniciado sesión   Responder Con Cita
  #2
Antiguo 8 de junio de 2020, 16:30
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
36 años
19.06.2021 11:02
PROCEDURE DIVISION
Posts: 1.755
Enviado: 552
Recibido: 722
Soluiones: 94
Reputació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

@Alberto, tal cual tú lo imaginas, no se puede hacer. Aunque se puede apañar con unos campos de tamaño variable y unos punteros.



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
  #3
Antiguo 8 de junio de 2020, 16:34
IDENTIFICATION DIVISION
JCantero
 Novato Senior
ENVIRONMENT DIVISION
Avatar de JCantero
DATA DIVISION
junio 2016
Albacete
55 años
18.06.2021 18:38
PROCEDURE DIVISION
Posts: 181
Enviado: 53
Recibido: 120
Soluiones: 8
Reputación: 18
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 poder ayudarte debes indicar para que cobol necesitas ese requerimiento.

Y también que problema intentas solucionar de esa manera para poder abordarlo de otra forma.

Con lo que cuentas, Si no entiendo mal quieres asignar "123" de la variable W-AUX a CAMPO1-COPY-TABLA.

Al menos en RM/COBOL se puede saber el tipo y la longitud de un parámetro (o argumento).

Sabiendo que buscas un parámetro de longitud 10, se puede ver el tipo de cada uno de los parámetros y mover el contenido al parámetro (argumento, variable) seleccionado.

Creo que de ninguna forma podrás ver el nombre de la variable sin tener el fuente para poder analizarlo ya que al compilar todas las variables se codifican con una dirección de memoria. A no se que esa información forme parte implicita ("informativa") de la propia variable.

Dime sobre que quieres que incida más e intenta explicar el problema que intentas solucionar para poder ayudarte entre todos.
JCantero no ha iniciado sesión   Responder Con Cita
  #4
Antiguo 9 de junio de 2020, 11:44
IDENTIFICATION DIVISION
Alberto
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de Alberto
DATA DIVISION
junio 2020
19.05.2021 11:46
PROCEDURE DIVISION
Posts: 5
Enviado: 2
Recibido: 0
Soluiones: 0
Reputación: 0
Alberto is an unknown quantity at this point
Predeterminado

Cita del post de JCantero Ver Mensaje
Para poder ayudarte debes indicar para que cobol necesitas ese requerimiento.
Cobol para mainframe z/OS, Plataforma Altamira, la versión de Cobol creo que es la 6, pero no estoy totalmente seguro.

Cita del post de JCantero Ver Mensaje
Con lo que cuentas, Si no entiendo mal quieres asignar "123" de la variable W-AUX a CAMPO1-COPY-TABLA.
Quiero asignar '123' al campo CAMPO1-COPY-TABLA, pero '123' no esta en la W-AUX, en W-AUX esta el nombre del campo de la copy, es decir, CAMPO1-COPY-TABLA. Quizas se entienda mejor con la explicación que expongo a continuación.

Cita del post de JCantero Ver Mensaje
Y también que problema intentas solucionar de esa manera para poder abordarlo de otra forma.
Tengo muchos ficheros (no me he molestado en contarlos, porque son muchos, mas de 100 seguro) con el formato:

Código:
TABLA_CAMPO1  TABLA_CAMPO2  TABLA_CAMPO3  TABLA....
ABCDEFGHIJ    123456789     123456789     ...
(cientos o miles de registros similares, notar que el campo TBL1_CAMPO3 aunque en la copy es COMP-3, aquí esta como PIC 9(9). Y sin guiones bajo, que no he sabido cuadrar los datos con las cabeceras.. )

Son datos provenientes de tablas, no son unload propiamente dichas.

Tengo que realizar un programa que lea UN fichero de estos (para ejecutarlo luego para cada fichero...) y deje los datos en otro fichero con el formato de la copy correspondiente, las copys las meto todas dentro del código del programa, y ya tengo como hacer que dicho programa identifique por la cabecera que fichero es y que copy le corresponde.

Mi idea es leer la cabecera, guardar el nombre del campo TBL1_CAMPO1 en la variable W-AUX y como ya se que copy es, al leer los datos,mover el valor 'ABCDEFGHIJ' al campo CAMPO1-COPY-TABLA de la copy.

Solo necesito esto último, el tema de leer la cabecera, guardar los nombre y leer los datos y demas lo tengo claro.

Muchas gracias.
Alberto no ha iniciado sesión   Responder Con Cita
  #5
Antiguo 9 de junio de 2020, 13:23
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
36 años
19.06.2021 11:02
PROCEDURE DIVISION
Posts: 1.755
Enviado: 552
Recibido: 722
Soluiones: 94
Reputació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

@Alberto, según entiendo, el nombre del campo en la cabecera no corresponde con el nombre del campo de la COPY. Sea así o no, se necesitaría una referencia de relación nombre_cabecera-campo_copy.

Las COPYs también son de formato distinto, los ficheros desde luego también...

Lo veo realmente complicado de hacer como tú lo quieres. Encima siendo IBM Enterprise Cobol, que no se enfoca en mecanismos milagrosos tanto como Micro Focus por ejemplo...

Habría que decirnos con más detalles, no sé, nos puedes pasar un par de COPY-s para que las veamos?



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
  #6
Antiguo 9 de junio de 2020, 16:13
IDENTIFICATION DIVISION
Alberto
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de Alberto
DATA DIVISION
junio 2020
19.05.2021 11:46
PROCEDURE DIVISION
Posts: 5
Enviado: 2
Recibido: 0
Soluiones: 0
Reputación: 0
Alberto is an unknown quantity at this point
Predeterminado

Cita del post de Kuk Ver Mensaje
@Alberto, según entiendo, el nombre del campo en la cabecera no corresponde con el nombre del campo de la COPY. Sea así o no, se necesitaría una referencia de relación nombre_cabecera-campo_copy.
Es el mismo nombre en la cabecera del fichero que en la copy, me he explicado mal .
Por eso se que copy corresponde con cada fichero con solo leer la cabecera.

Cita del post de Kuk Ver Mensaje
Las COPYs también son de formato distinto, los ficheros desde luego también...
Mas o menos, así es, te pongo un ejemplo de una copy y su fichero, es mas grande, esto es una muestra debidamente manipulada para que no se reconozcan los datos...

Gracias por vuestro tiempo
Archivos Adjuntos
Tipo de Archivo: txt ejemplo.txt (1,3 KB, 11 descargas)
Alberto no ha iniciado sesión   Responder Con Cita
  #7
Antiguo 9 de junio de 2020, 18:49
IDENTIFICATION DIVISION
JCantero
 Novato Senior
ENVIRONMENT DIVISION
Avatar de JCantero
DATA DIVISION
junio 2016
Albacete
55 años
18.06.2021 18:38
PROCEDURE DIVISION
Posts: 181
Enviado: 53
Recibido: 120
Soluiones: 8
Reputación: 18
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

He utilizado algo parecido para algunas cosas.

A ver si te cuadra esto......

Suponiendo que lo leido de la tabla está en campo-tabla, para cada copy debes de hacer lo siguiente:

Código COBOL:
  1.  
  2.            evaluate w-aux
  3.            when 'CAMPO1-COPY-TABLA'
  4.                 move campo-tabla to CAMPO1-COPY-TABLA
  5.            when 'CAMPO2-COPY-TABLA'
  6.                 move campo-tabla to CAMPO2-COPY-TABLA
  7.            when 'CAMPO3-COPY-TABLA'
  8.                 move campo-tabla to CAMPO3-COPY-TABLA
  9.           end-evaluate
JCantero no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Alberto (11 de junio de 2020)
  #8
Antiguo 9 de junio de 2020, 21:00
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
36 años
19.06.2021 11:02
PROCEDURE DIVISION
Posts: 1.755
Enviado: 552
Recibido: 722
Soluiones: 94
Reputació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

@Alberto, estoy totalmente de acuerdo con @JCantero.

Por lo pronto, una variable consiste en dos cosas:
  1. Una dirección
  2. Un tamaño/espacio reservado bajo dicha dirección

Además, al compilar un programa, los nombres de las variables se convierten por el compilador también en unas direcciones (offsets) dentro del binario generado. Lo cual quiere decir, que el nombre de una variable se pierde en cuanto el fuente se convierte en binario.

Lo que sí es posible hacer, técnicamente, es obtener la dirección de una variable en un campo de tipo puntero y luego hacer referencia al espacio de dicha variable sin su nombre. Pero aun montando el chiringuito con los punteros, igualmente necesitarías los mismos IF-s que muestra @JCantero, porque necesitas evaluar el valor del nombre del campo Cobol que viene en el fichero.



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
Ha dicho Gracias : 1
Alberto (11 de junio de 2020)
  #9
Antiguo 11 de junio de 2020, 12:12
IDENTIFICATION DIVISION
Alberto
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de Alberto
DATA DIVISION
junio 2020
19.05.2021 11:46
PROCEDURE DIVISION
Posts: 5
Enviado: 2
Recibido: 0
Soluiones: 0
Reputación: 0
Alberto is an unknown quantity at this point
Predeterminado



Vaya curro me voy a pegar de teclear... esperaba encontrar una manera de no teclear seguramente un par de miles de campos.

Muchas gracias por vuestras aportaciones.
Alberto no ha iniciado sesión   Responder Con Cita
  #10
Antiguo 11 de junio de 2020, 14:30
IDENTIFICATION DIVISION
JCantero
 Novato Senior
ENVIRONMENT DIVISION
Avatar de JCantero
DATA DIVISION
junio 2016
Albacete
55 años
18.06.2021 18:38
PROCEDURE DIVISION
Posts: 181
Enviado: 53
Recibido: 120
Soluiones: 8
Reputación: 18
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

Cita del post de Alberto Ver Mensaje


Vaya curro me voy a pegar de teclear... esperaba encontrar una manera de no teclear seguramente un par de miles de campos.

Muchas gracias por vuestras aportaciones.
Por si te sirve de ayuda, cuando yo realizo algo así repetitivo, preparo una macro en mi editor.
  1. Copiar copys a un fichero (type * >> fichero.txt)
  2. Editar el programa fuente junto a fichero.txt
  3. Preparar macro -> Copiar campos de fichero.txt al fuente estructurando el "evaluate"
  4. Repetirlo tantas veces como campos tengas tengas

5 o 5'30 minutos.


Yo empleo tiempo en pensar como no mover una tecla evitando tiempo y errores que se generan al teclear.
JCantero no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Kuk (11 de junio de 2020)
Respuesta


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 20:15.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2021, Jelsoft Enterprises Ltd.