Resultados 1 al 7 de 7

Tema: Pasar datos a texto plano

  1. #1
      Acabo de llegar...
    M

    Registrado
    julio de 2016
    Ubicación
    Santa Fe
    Mensajes
    8
    Última visita
    04.11.2016

    Agradecimientos
     
    Recibidos
    0
    Enviados
    5

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

    Teclado Pasar datos a texto plano

    Buenas a todos, tengo una gran duda que no encuentro información precisa en la red y es la siguiente. ¿Se puede pasar los datos de Cobol a texto plano?, es decir a un txt. Hago esta pregunta, por que necesito sacar esa información de un sistema echo en Cobol y pasarlo a una nueva base de datos.

    Escribo esta inquietud por que soy nuevo en este mundo de Cobol, y tengo nociones básicas del mismo.Desde ya muchas gracias, Saludos.

    0 Not allowed!

  2. #2
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    798
    Última visita
    Ayer a las 21:06

    Agradecimientos
     
    Recibidos
    440
    Enviados
    362

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

    Predeterminado

    Claro que puedes, sin problemas, el fichero lo tienes que definir como LINE SEQUENTIAL, lees los registros de uno y, montando la cadena con un STRING, los grabas en el otro, sólo has de tener en cuenta en los campos numéricos lo siguiente:

    - No pueden ser de tipo COMP, BINARY o HEXADECIMAL, si alguno es de éste tipo, has de moverlo antes a un tipo editado. (con formato PIC Z.ZZZ)
    - Los números con formato DISPLAY, (los normales del tipo PIC 9(5)V(99), por ejemplo), has de moverlos antes a un tipo EDITADO, por ejemplo PIC Z.ZZ9,99, o de lo contrario, te aparecerá en el último dígito una letra de la A a la F.
    - Cuando un número sea 0 (cero), y no quieras que te aparezca nada, ni siquera el 0, usa la cláusula BLANK WHEN ZERO.

    Si tienes alguna problema, o quieres algún ejemplo, no dudes en consultar de nuevo.

    Un saludo y suerte.-

    0 Not allowed!

  3. #3
      Acabo de llegar...
    M

    Registrado
    julio de 2016
    Ubicación
    Santa Fe
    Mensajes
    8
    Última visita
    04.11.2016

    Agradecimientos
     
    Recibidos
    0
    Enviados
    5

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

    Predeterminado

    Muchas Gracias Josber por tu gran respuesta, gracias por esos consejos.

    Pero me encantaría, si no es problema, un ejemplo para ver si estoy en buen camino con lo que estoy pensando y haciendo. Ya que en esto de cobol son muy novato, para hacerte sincero. Desde ya muchas gracias nuevamente, Saludos.

    0 Not allowed!

  4. #4
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    798
    Última visita
    Ayer a las 21:06

    Agradecimientos
     
    Recibidos
    440
    Enviados
    362

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

    Predeterminado
    ¡Solución!1 usuarios han marcado el post como Solución

    Aquí, tienes un sencillo ejemplo, lo he escrito directamente, así es que puede que tenga errores y no compile bien, pero aunque sintácticamente no funcione, la lógica de programación es correcta.

    COBOL Código:
    1. IDENTIFICATION DIVISION.
    2.  
    3. ENVIRONMENT DIVISION.
    4. CONFIGURATION SECTION.
    5. SPECIAL-NAMES.
    6.      DECIMAL-POINT IS COMMA.
    7. INPUT-OUTPUT SECTION.
    8. FILE-CONTROL.
    9.      SELECT OPTIONAL ORIGEN ASSIGN TO "C:\ORIGEN.DAT"
    10.             ORGANIZATION IS INDEXED
    11.             ACCESS MODE IS DYNAMIC
    12.             RECORD KEY IS NUMERO
    13.             STATUS IS STORI
    14.      SELECT OPTIONAL DESTINO ASSIGN TO "C:\DESTINO.TXT"
    15.             ORGANIZATION IS LINE SEQUENTIAL
    16.             STATUS IS STDES.
    17.  
    18. DATA DIVISION.
    19.  
    20. FILE SECTION.
    21. FD  ORIGEN GLOBAL.
    22. 01  REG-ORI.
    23.     03  DATOS.
    24.         05  NUMERO              PIC 9(5).
    25.         05  NOMBRE              PIC X(50).
    26.         05  DIREC               PIC X(50).
    27.         05  CP                  PIC X(5).
    28.         05  POB                 PIC X(30).
    29.     03  ECO.
    30.         05  ACUM1               PIC S9(9)V999 COMP-5.
    31.         05  ACTIVO              PIC X.
    32.         05  ACUM2               PIC S9(9)V999 BINARY.
    33.         05  ACUM3               PIC S9(9)V999.
    34.  
    35. FD  DESTINO GLOBAL
    36.     LABEL RECORD IS STANDARD.
    37. 01  LINEA                       PIC X(255).
    38.  
    39. WORKING-STORAGE SECTION.
    40. 01  STDES                       PIC XX.
    41. 01  STORI                       PIC XX.
    42. 01  P                           PIC 999 BINARY.
    43. 01  WSEP                        PIC X VALUE "|".    *> Lo vamos a utilizar como separador de campos.
    44. 01  CINCO-EDI                   PIC ZZ.ZZ9.
    45. 01  NUEVE-EDI                   PIC --.---.---.---,---.
    46. 01  CONTA                       PIC 9(5).
    47.  
    48. PROCEDURE DIVISION.
    49.  
    50. INICIO.
    51.     OPEN INPUT ORIGEN.
    52.     OPEN OUTPUT DESTINO.
    53. POSICIONAR.
    54.     MOVE 0 TO NUMERO  CONTA.
    55.     START ORIGEN KEY NOT LESS NUMERO
    56.           INVALID KEY
    57.                   INVOKE POW-SELF "DisplayMessage"
    58.                          USING "*Error, el fichero está vacío ..."
    59.                                "*ERROR"
    60.                                POW-DMICONERROR
    61.                   END-INVOKE
    62.                   INVOKE POW-SELF "CloseForm"
    63.                   EXIT PROGRAM
    64.     END-START.
    65. LEER.
    66.     READ ORIGEN NEXT RECORD
    67.          AT END
    68.             GO FIN-LEER
    69.     END-READ.
    70.    
    71.     PERFORM MONTAR-LINEA THRU FIN-MONTAR.
    72.    
    73.     GO LEER.
    74.  
    75. FIN-LEER.
    76.     MOVE CONTA TO CINCO-EDI.
    77.     MOVE SPACES TO LINEA.
    78.    
    79.     STRING "Fin del traspaso. Se han pasado "
    80.            CINCO-EDI
    81.            " Registros." DELIMITED BY SIZE INTO LINEA
    82.     END-STRING.
    83.    
    84.     INVOKE POW-SELF "DisplayMessage"
    85.            USING LINEA
    86.                  "Información"
    87.                  POW-DMICONINFORMATION
    88.     END-INVOKE
    89.    
    90.     CLOSE ORIGEN DESTINO.
    91.     INVOKE POW-SELF "CloseForm".
    92.     EXIT PROGRAM.
    93.  
    94. MONTAR-LINEA.
    95.     MOVE 0 TO CINCO-EDI NUEVE-EDI P.
    96.     MOVE SPACES TO LINEA.
    97.    
    98.     MOVE NUMERO TO CINCO-EDI.
    99.    
    100.     STRING CINCO-EDI
    101.            WSEP
    102.            NOMBRE
    103.            WSEP
    104.            DIREC
    105.            WSEP
    106.            CP
    107.            WSEP
    108.            POB
    109.            WSEP DELIMITED BY SIZE INTO LINEA
    110.     END-STRING.
    111.  
    112.     *>
    113.     *> ---- Buscamos el tamaño total almacenado para poder hacer el siguiente string
    114.     *>
    115.        
    116.     COMPUTE P = FUNCTION STORED-CHAR-LENGTH (LINEA) + 1.
    117.  
    118.     *>
    119.     *> ---- Después, ya no nos hace falta saber el tamaño, porque se guarda automáticamente en el "puntero" P
    120.     *>
    121.    
    122.     MOVE ACUM1 TO NUEVE-EDI.
    123.    
    124.     STRING ACUM1
    125.            WSEP
    126.            ACTIVO
    127.            WSEP DELIMITED BY SIZE INTO LINEA WITH POINTER P
    128.     END-STRING.
    129.    
    130.     MOVE ACUM2 TO NUEVE-EDI.
    131.    
    132.     STRING ACUM2
    133.            WSEP DELIMITED BY SIZE INTO LINEA WITH POINTER P
    134.     END-STRING.
    135.    
    136.     MOVE ACUM2 TO NUEVE-EDI.
    137.    
    138.     STRING ACUM3
    139.            DELIMITED BY SIZE INTO LINEA WITH POINTER P
    140.     END-STRING.
    141.    
    142.     WRITE LINEA.
    143.  
    144.     ADD 1 TO CONTA.
    145. FIN-MONTAR.
    146.     EXIT.

    Si hay algo que no entiendas, no dudes en preguntar.

    Un saludo.-

    0 Not allowed!

  5. #5
      Acabo de llegar...
    M

    Registrado
    julio de 2016
    Ubicación
    Santa Fe
    Mensajes
    8
    Última visita
    04.11.2016

    Agradecimientos
     
    Recibidos
    0
    Enviados
    5

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

    Predeterminado

    Hola Josber gracias nuevamente por tu respuesta, y sobre todo por el código de ayuda. Ahora voy a ponerme a leerlo y comprendedlo y cualquier cosa te consulto y aviso. Muchas gracias por tu gran ayuda.Saludos.

    0 Not allowed!

  6. #6
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    798
    Última visita
    Ayer a las 21:06

    Agradecimientos
     
    Recibidos
    440
    Enviados
    362

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

    Predeterminado

    @Matias, Te he borrado el último post porque estaba duplicado, procura no duplicar los post, por favor, no te he contestado antes porque he tenido el ordenador estropeado unos días.

    A ver, el código es muy sencillo, te explico:

    El apartado INICIO:

    Aquí abro el fichero de origen en modo lectura, y el fichero de destino en modo escritura, puesto que uno sólo lo voy a leer y el otro, sólo lo voy a grabar (escribir).

    El apartado POSICIONAR:

    Como el fichero de origen, vamos a leerlo desde principio a fin, necesitamos posicionarnos en el primer registro que haya, por eso movemos 0 a NUMERO, ya que no habrá un registro más bajo que ese. (El mover 0 a CONTA, es para "inicializar" el contador de registros pasados, para saber el número de registros que hemos traspasado).
    Como segundo paso, nos posicionamos en el fichero de origen (instrucción START) y le decimos que no sea menor del valor de NUMERO, (KEY NOT LESS NUMERO), que en este caso es 0 (cero), y que si hay un error (INVALID KEY), nos muestre un mensaje diciendo "*Error, el fichero está vacío ..." y que cierre el programa (INVOKE POW-SELF "CloseForm" EXIT PROGRAM)

    El apartado LEER:

    Una vez posicionados en el fichero, tenemos que "crear" un bucle que lo lea de principio a fin, eso es lo que hacemos en esta parte.
    Leemos el fichero y lo "preparamos" para leer el siguiente registro, (READ ORIGEN NEXT RECORD), y comprobamos si hemos llegado al final del fichero (AT END), si es así, lo "mandamos" al apartado FIN-LEER, (GO FIN-LEER), si no es así, lo enviamos a MONTAR-LINEA, que es donde generamos el fichero de texto que quieres, la diferencia entre GO y PERFORM, explicado así a lo bruto, es que GO, te envía a un sitio y alli te quedas, y PERFORM, te envía a un sitio, pero cuando termina, vuelves al punto de origen, en éste caso se termina en FIN-MONTAR.
    Después de MONTAR-LINEA y, como te he dicho anteriormente, al ser un bucle para leer todo el fichero, volvemos al apartado LEER, (así estaremos hasta que se cumpla la condición AT END, fin-de-fichero).

    El apartado FIN-LEER:

    Cuando hemos terminado de leer y traspasar todo el fichero, sólo nos queda informar al usuario del número total de registros que se han pasado, como el número queremos mostrarlo en modo "bonito", con su separador de millares, movemos el contador de registros a un editado, (MOVE CONTA TO CINCO-EDI).
    El siguiente paso es montar el texto de información, (STRING "Fin del traspaso. Se han pasado " CINCO-EDI " Registros." DELIMITED BY SIZE INTO LINEA END-STRING) y mostrar una ventana informativa con el texto, (INVOKE POW-SELF "DisplayMessage" USING LINEA ...), y por último, cerramos los ficheros abiertos, (CLOSE ORIGEN DESTINO) y cerramos el programa (INVOKE POW-SELF "CloseForm".).

    El apartado MONTAR-LINEA:

    En esta parte es donde montamos la linea de texto con todos los datos de la ficha del cliente, hay que tener en cuenta que, cuando pasamos datos numéricos, sean del tamaño que sean, a texto plano, el último número no lo pondrá en HEXADECIMAL, por lo que antes de pasarlo, lo movemos a un "editado" para evitar esto. (MOVE NUMERO TO CINCO-EDI.), y, para que no nos meta "basura", lo primero es "inicializar" las variables que vamos a utilizar. (MOVE 0 TO CINCO-EDI NUEVE-EDI P MOVE SPACES TO LINEA.)
    El como se monta la linea, ya está explicado en el propio código. Una vez montada la LINEA con el texto, sólo nos queda grabarla en el fichero de destino. (WRITE DESTINO).
    Por último, añadimos 1 al contador de registros grabados. (ADD 1 TO CONTA)

    El apartado FIN-MONTAR:

    Aquí es donde le indicamos al PERFORM que hicimos antes, que se ha acabado el código y que vuelva (EXIT.).


    Con ésto está todo explicado, si aún tienes alguna duda, pregunta sin problemas.

    Un saludo.-

    0 Not allowed!

  7. #7
      Acabo de llegar...
    M

    Registrado
    julio de 2016
    Ubicación
    Santa Fe
    Mensajes
    8
    Última visita
    04.11.2016

    Agradecimientos
     
    Recibidos
    0
    Enviados
    5

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

    Predeterminado

    Hola Josber, gracias por tu respuesta. Desde ya me disculpo por el tema del duplicado pero es que se me paso jeje.
    Y ahora me pongo a chequear lo que me explicaste porque ando un poco atareado de trabajo, pero te agradezco de corazón el tiempo que dedicas a contestar mis dudas, enserio. Muchas gracias.
    Y seguro que algo a futuro te voy a volver a preguntar, jeje.
    Saludos, y nuevamente muchas gracias.

    0 Not allowed!

Información de Tema

Usuarios Viendo este Tema

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

Temas Similares

  1. [Herramienta] Pasar datos de Cobol (Archivos RMKF) a txt/Excel
    Por JuanPelaez en el foro COBOL - General
    Respuestas: 10
    Último Mensaje: 03.01.2020, 12:58
  2. [Sintaxis] Pasar CSV a texto plano
    Por theezraak en el foro RM/COBOL
    Respuestas: 8
    Último Mensaje: 24.10.2016, 11:01
  3. [Componente] Encriptar Texto
    Por Josber en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 10
    Último Mensaje: 14.06.2016, 17:49
  4. [Sintaxis] Pasar número a fichero Texto Plano
    Por Josber en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 3
    Último Mensaje: 03.06.2015, 11:09
  5. [Sintaxis] Pasar datos entre pantallas
    Por Breew en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 8
    Último Mensaje: 12.05.2015, 18:31

Etiquetas para este Tema

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
  •