Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol IBM Enterprise COBOL
IBM Enterprise COBOL COBOL bajo Mainframes: z/OS - OS/400
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Mostrar Nombre del Formulario Hrmcobol PowerFORM 2 30 de mayo de 2021 20:40
[Sintaxis] Búsqueda nombre en ComboBox jmeza Fujitsu COBOL 1 10 de septiembre de 2020 19:22
[Herramienta] Nombre de Ordenador Recato53 PowerCOBOL (ActiveX, v4 - v11) 3 9 de octubre de 2019 11:28
[Sintaxis] Nombre de proyecto o Dll Recato53 PowerCOBOL (ActiveX, v4 - v11) 1 9 de diciembre de 2017 11:23
[Duda] Tamaño de campo Josber PowerFORM 2 16 de diciembre de 2015 19:47

Respuesta

  #1
Antiguo 8 de junio de 2020, 13:46
Alberto
Forero Junior
Última Actividad 19.05.2021 12:46
Posts Posts: 5
Likes enviados Enviados: 2
Likes recibidos Recibidos: 0
Predeterminado Nombre de campo dentro de variable.
0 Inactivo Inactivo

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 is offline   Responder Con Cita
  #2
Antiguo 8 de junio de 2020, 17:30
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@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 is offline   Responder Con Cita
  #3
Antiguo 8 de junio de 2020, 17:34
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

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 is offline   Responder Con Cita
  #4
Antiguo 9 de junio de 2020, 12:44
Alberto
Forero Junior
Última Actividad 19.05.2021 12:46
Posts Posts: 5
Likes enviados Enviados: 2
Likes recibidos Recibidos: 0

Citación 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.

Citación 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.

Citación 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 is offline   Responder Con Cita
  #5
Antiguo 9 de junio de 2020, 14:23
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@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 is offline   Responder Con Cita
  #6
Antiguo 9 de junio de 2020, 17:13
Alberto
Forero Junior
Última Actividad 19.05.2021 12:46
Posts Posts: 5
Likes enviados Enviados: 2
Likes recibidos Recibidos: 0

Citación 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 :mad:.
Por eso se que copy corresponde con cada fichero con solo leer la cabecera.

Citación 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)Descargas: 147
Alberto is offline   Responder Con Cita
  #7
Antiguo 9 de junio de 2020, 19:49
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

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 is offline   Responder Con Cita
  #8
Antiguo 9 de junio de 2020, 22:00
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@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 is offline   Responder Con Cita
  #9
Antiguo 11 de junio de 2020, 13:12
Alberto
Forero Junior
Última Actividad 19.05.2021 12:46
Posts Posts: 5
Likes enviados Enviados: 2
Likes recibidos Recibidos: 0



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 is offline   Responder Con Cita
  #10
Antiguo 11 de junio de 2020, 15:30
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

Citación 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 is offline   Responder Con Cita
Respuesta


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

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:49.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.