Página 1 de 2 1 2 ÚltimoÚltimo
Resultados 1 al 10 de 11

Tema: Nombre de campo dentro de variable.

  1. #1
      Acabo de llegar...
    A

    Registrado
    junio de 2020
    Mensajes
    5
    Última visita
    19.05.2021

    Agradecimientos
     
    Recibidos
    0
    Enviados
    2

    Citaciones y menciones
     
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    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.

    COBOL Código:
    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.

    0 Not allowed!

  2. #2
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,025
    Última visita
    Hoy a las 10:52

    Agradecimientos
     
    Recibidos
    869
    Enviados
    734

    Citaciones y menciones
     
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    6 Post(s)
    Poder de Reputación
    10

    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.

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  3. #3
      Senior
    J

    Registrado
    junio de 2016
    Ubicación
    Albacete
    Edad
    56
    Mensajes
    293
    Última visita
    Hoy a las 16:18

    Agradecimientos
     
    Recibidos
    191
    Enviados
    99

    Citaciones y menciones
     
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    1 Post(s)
    Poder de Reputación
    24
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    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.

    0 Not allowed!

  4. #4
      Acabo de llegar...
    A

    Registrado
    junio de 2020
    Mensajes
    5
    Última visita
    19.05.2021

    Agradecimientos
     
    Recibidos
    0
    Enviados
    2

    Citaciones y menciones
     
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado

    Cita Iniciado por 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 Iniciado por 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 Iniciado por 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:

    CODE Código:
    1. TABLA_CAMPO1  TABLA_CAMPO2  TABLA_CAMPO3  TABLA....
    2. 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.

    0 Not allowed!

  5. #5
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,025
    Última visita
    Hoy a las 10:52

    Agradecimientos
     
    Recibidos
    869
    Enviados
    734

    Citaciones y menciones
     
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    6 Post(s)
    Poder de Reputación
    10

    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?

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  6. #6
      Acabo de llegar...
    A

    Registrado
    junio de 2020
    Mensajes
    5
    Última visita
    19.05.2021

    Agradecimientos
     
    Recibidos
    0
    Enviados
    2

    Citaciones y menciones
     
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado

    Cita Iniciado por 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.

    Cita Iniciado por 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
    Ficheros adjuntos Ficheros adjuntos

    0 Not allowed!

  7. #7
      Senior
    J

    Registrado
    junio de 2016
    Ubicación
    Albacete
    Edad
    56
    Mensajes
    293
    Última visita
    Hoy a las 16:18

    Agradecimientos
     
    Recibidos
    191
    Enviados
    99

    Citaciones y menciones
     
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    1 Post(s)
    Poder de Reputación
    24
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    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:

    COBOL Código:
    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

    0 Not allowed!

  8. #8
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,025
    Última visita
    Hoy a las 10:52

    Agradecimientos
     
    Recibidos
    869
    Enviados
    734

    Citaciones y menciones
     
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    6 Post(s)
    Poder de Reputación
    10

    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.

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  9. #9
      Acabo de llegar...
    A

    Registrado
    junio de 2020
    Mensajes
    5
    Última visita
    19.05.2021

    Agradecimientos
     
    Recibidos
    0
    Enviados
    2

    Citaciones y menciones
     
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    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.

    0 Not allowed!

  10. #10
      Senior
    J

    Registrado
    junio de 2016
    Ubicación
    Albacete
    Edad
    56
    Mensajes
    293
    Última visita
    Hoy a las 16:18

    Agradecimientos
     
    Recibidos
    191
    Enviados
    99

    Citaciones y menciones
     
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    1 Post(s)
    Poder de Reputación
    24
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado

    Cita Iniciado por 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.

    0 Not allowed!

Página 1 de 2 1 2 ÚltimoÚltimo

Información de Tema

Usuarios Viendo este Tema

Actualmente hay 2 usuarios viendo este tema. (0 miembros y 2 visitantes)

Temas Similares

  1. [Sintaxis] Actualizar campo en una hoja de Excel
    Por orlando en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 1
    Último Mensaje: 17.11.2019, 21:57
  2. [Herramienta] Nombre de Ordenador
    Por Recato53 en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 3
    Último Mensaje: 09.10.2019, 11:28
  3. [Sintaxis] Nombre de proyecto o Dll
    Por Recato53 en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 1
    Último Mensaje: 09.12.2017, 11:23
  4. [Información] Reducir tamaño campo
    Por Gatomalo en el foro RM/COBOL
    Respuestas: 4
    Último Mensaje: 24.11.2017, 04:30
  5. [Información] Tamaño de campo
    Por Josber en el foro PowerFORM
    Respuestas: 2
    Último Mensaje: 16.12.2015, 19:47

Marcadores

Marcadores

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •