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 > Fujitsu COBOL > PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
Comunicados
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Herramienta] Pasar datos de Cobol (Archivos RMKF) a txt/Excel JuanPelaez COBOL - General 10 3 de enero de 2020 11:58
[Sintaxis] Pasar CSV a texto plano theezraak RM/COBOL 8 24 de octubre de 2016 10:01
[Componente] Encriptar Texto Josber PowerCOBOL (ActiveX, v4 - v11) 10 14 de junio de 2016 16:49
[Sintaxis] Pasar número a fichero Texto Plano Josber PowerCOBOL (ActiveX, v4 - v11) 3 3 de junio de 2015 10:09
[Sintaxis] Pasar datos entre pantallas Breew PowerCOBOL (ActiveX, v4 - v11) 8 12 de mayo de 2015 17:31
Respuesta
 
Herramientas

  #1
Antiguo 30 de junio de 2016, 23:41
IDENTIFICATION DIVISION
Matias
Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de Matias
DATA DIVISION
Forero desde (Registrado)junio 2016
Argentina
Ubicación Santa Fe
Última Actividad04.11.2016 20:36
PROCEDURE DIVISION
PostsPosts: 8
Ha dicho GraciasEnviado: 5
Ha recibido agradecimientosRecibido: 0
Mejores respuestasSoluiones: 0
ReputaciónReputación: 0
Matias is on a distinguished road
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.
Matias no ha iniciado sesión   Responder Con Cita
Mejores respuestas Soluciones: 1
  #2
Antiguo 1 de julio de 2016, 07:02
IDENTIFICATION DIVISION
Josber
Super Moderador
Activista del Foro: Activista del Foro - Razón: Por aportar manuales y enriquecer   Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Razón: Por muchos agradecimientos 
ENVIRONMENT DIVISION
Avatar de Josber
DATA DIVISION
Forero desde (Registrado)febrero 2015
España
Ubicación Alicante
Última Actividad22.09.2020 14:23
PROCEDURE DIVISION
PostsPosts: 538
Ha dicho GraciasEnviado: 230
Ha recibido agradecimientosRecibido: 248
Mejores respuestasSoluiones: 34
ReputaciónReputación: 24
Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road
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.-
Josber no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Matias ( 1 de julio de 2016)
  #3
Antiguo 1 de julio de 2016, 13:34
IDENTIFICATION DIVISION
Matias
Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de Matias
DATA DIVISION
Forero desde (Registrado)junio 2016
Argentina
Ubicación Santa Fe
Última Actividad04.11.2016 20:36
PROCEDURE DIVISION
PostsPosts: 8
Ha dicho GraciasEnviado: 5
Ha recibido agradecimientosRecibido: 0
Mejores respuestasSoluiones: 0
ReputaciónReputación: 0
Matias is on a distinguished road
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.
Matias no ha iniciado sesión   Responder Con Cita
  #4
Antiguo 2 de julio de 2016, 16:44
IDENTIFICATION DIVISION
Josber
Super Moderador
Activista del Foro: Activista del Foro - Razón: Por aportar manuales y enriquecer   Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Razón: Por muchos agradecimientos 
ENVIRONMENT DIVISION
Avatar de Josber
DATA DIVISION
Forero desde (Registrado)febrero 2015
España
Ubicación Alicante
Última Actividad22.09.2020 14:23
PROCEDURE DIVISION
PostsPosts: 538
Ha dicho GraciasEnviado: 230
Ha recibido agradecimientosRecibido: 248
Mejores respuestasSoluiones: 34
ReputaciónReputación: 24
Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road
Predeterminado
1 usuarios han marcado este 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.

Código COBOL:
  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.-
Josber no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Matias ( 4 de julio de 2016)
  #5
Antiguo 4 de julio de 2016, 01:09
IDENTIFICATION DIVISION
Matias
Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de Matias
DATA DIVISION
Forero desde (Registrado)junio 2016
Argentina
Ubicación Santa Fe
Última Actividad04.11.2016 20:36
PROCEDURE DIVISION
PostsPosts: 8
Ha dicho GraciasEnviado: 5
Ha recibido agradecimientosRecibido: 0
Mejores respuestasSoluiones: 0
ReputaciónReputación: 0
Matias is on a distinguished road
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.
Matias no ha iniciado sesión   Responder Con Cita
  #6
Antiguo 7 de agosto de 2016, 18:17
IDENTIFICATION DIVISION
Josber
Super Moderador
Activista del Foro: Activista del Foro - Razón: Por aportar manuales y enriquecer   Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Razón: Por muchos agradecimientos 
ENVIRONMENT DIVISION
Avatar de Josber
DATA DIVISION
Forero desde (Registrado)febrero 2015
España
Ubicación Alicante
Última Actividad22.09.2020 14:23
PROCEDURE DIVISION
PostsPosts: 538
Ha dicho GraciasEnviado: 230
Ha recibido agradecimientosRecibido: 248
Mejores respuestasSoluiones: 34
ReputaciónReputación: 24
Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road
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.-
Josber no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Matias (12 de agosto de 2016)
  #7
Antiguo 12 de agosto de 2016, 18:47
IDENTIFICATION DIVISION
Matias
Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de Matias
DATA DIVISION
Forero desde (Registrado)junio 2016
Argentina
Ubicación Santa Fe
Última Actividad04.11.2016 20:36
PROCEDURE DIVISION
PostsPosts: 8
Ha dicho GraciasEnviado: 5
Ha recibido agradecimientosRecibido: 0
Mejores respuestasSoluiones: 0
ReputaciónReputación: 0
Matias is on a distinguished road
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.
Matias no ha iniciado sesión   Responder Con Cita
Respuesta

Tags
ficheros cobol , texto plano


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