Iniciar Sesión

Ver la Versión Completa : [Herramienta] Exportar datos de una app Cobol a un .txt o .csv


manu
15 de abril de 2022, 21:57
Buenas, estoy desarrollando un programa en Python para reemplazar uno de mas de 30 años hecho en Cobol, la cosa va muy bien encaminada pero necesito extraer los datos de cobol para no tener que cargar la base de datos a mano... Hace varios días ya que estoy intentando hacerlo y buscando información en múltiples sitios y no consigo dar en el clavo...

Antes que nada debo aclarar que no tengo ningún conocimiento de Cobol (más que lo que he podido aprender en estos días que llevo investigando)
Del programa Cobol tengo acceso absolutamente a todos los archivos, con extensiones .CBL, .COB, .INX, .SQZ, .OVL, e incluso unos que no tienen extensión donde se encuentra toda la información que necesito pero "desordenada", siguiendo un patrón que el sistema comprende (supongo que sabrán a que me refiero)

Analizando dichos archivos he podido entender el patrón que sigue (por ej.: los primeros 2 caracteres pertenecen a un dato, los siguientes 6 a otro, los siguientes 4 a otro, etc...) sin embargo tiene ciertas inconsistencias que no me permite hacer algo que los separe (algunos tienen 256 caracteres, otros 257; para un dato algunos usan un solo caracter y otros dos; hasta un punto cada renglón representa una "fila" y en cierto punto empieza a haber varias "filas" por renglón; etc...)

El programa esta hecho con RM/COBOL RUNTIME <Ver 2.1A >.

Intenté utilizar varias herramientas que vi en otras webs e incluso con tres que encontré en este foro (ReadCOBOLFile (https://www.cobolforo.es/showthread.php?t=645&highlight=rmkf), mira (https://www.cobolforo.es/showpost.php?p=5129&postcount=8), UTIL (https://www.cobolforo.es/showpost.php?p=4928&postcount=7)) pero ninguno me funcionó (o quizá no supe utilizarlos correctamente)

También comenzé a ver unos videotutoriales para comprender el funcionamiento de Cobol pero sinceramente no es muy viable que aprenda un lenguaje nuevo, completamente diferente a lo que ya conozco, para poder sacar los datos...

Si existe alguna herramienta que pueda extraer la base de datos y exportarla a un archivo que me permita migrarla, o si alguien puede extraerla o explicarme como hacerlo se lo agradecería muchísimo...

Desde ya muchas Gracias

JCantero
15 de abril de 2022, 23:25
Esa versión 2.1 es muy antigua.

Por eso las utilidades que has encontrado no te funcionan.

Tienes tres opciones.

1) convertir los ficheros que tienes a una version mas reciente. Rmcobol lleva una utilidad para ello. Se llama rmifca.cob. Pero necesitaras una version de cobol mas reciente. Te pego aqui un link:

Convert RM/COBOL indexed file v2.1 (dual) into current version 12 - RM COBOL - Forum - RM/COBOL (https://community.microfocus.com/cobol/rmcobol/f/forumid-21/146506/convert-rm-cobol-indexed-file-v2-1-dual-into-current-version-12)

2) Poner la impresora a un fichero. Imprimes la informacion deseada y vas importando la informacion de esos ficheros.

3) hacer un pequeno programa en cobol, con un bucle, que lea la informacion del fichero deseado y te lo deje en txt. Si deseas ayuda, envia la select y la fd de un fichero y te hacemos una rutina para exportar ese fichero. Con el resto ya lo harias tu siguiendo el esquema.

Decide la opcion deseada y ya nos dices como podemos ayudarte.

manu
17 de abril de 2022, 01:41
Buenas, primero que nada muchas Gracias por la respuesta... Quiero molestar lo menos posible así que intenté realizar la primer opción, sin embargo el archivo no se encuentra disponible... Antes de ayer descargué la versión 5.36 de RMCobol y puedo ver que el archivo RMIFCA.COB se encuentra en la carpeta... Me podrías explicar cómo utilizarlo? Cómo ejecutarlo y qué archivos debería actualizar? Una vez actualizados ya podría utilizar, por ejemplo, la utilidad ReadCOBOLFile y generar a partir de éstos un .CSV?


Saludos!

manu
17 de abril de 2022, 02:13
Buenas, primero que nada muchas Gracias por la respuesta... Quiero molestar lo menos posible así que intenté realizar la primer opción, sin embargo el archivo no se encuentra disponible... Antes de ayer descargué la versión 5.36 de RMCobol y puedo ver que el archivo RMIFCA.COB se encuentra en la carpeta... Me podrías explicar cómo utilizarlo? Cómo ejecutarlo y qué archivos debería actualizar? Una vez actualizados ya podría utilizar, por ejemplo, la utilidad ReadCOBOLFile y generar a partir de éstos un .CSV?


Saludos!

ACTUALIZACIÓN:

Encontré información sobre como utilizarlo acá (https://www.yumpu.com/en/document/read/9316915/rm-cobol-to-rm-cobol-85-conversion-guide-micro-focus)... Pero no pude lograrlo:

En primer lugar no sé que poner en BLOCK CONTAINS CLAUSE... De todas formas intenté dando a enter. Luego me da el siguiente error:

743

JCantero
17 de abril de 2022, 17:18
La version 5.3 no admite nombres largos.

Repite el proceso, en vez de poner ZZZ_socios pon socios.txt

Y muestra que te dice......

---------- Post añadido el 17 de abril de 2022 a las 17:24 ----------

Seguramente la vez que lo ejecutaste te creó el fichero ZZZ_S~1

---------- Post añadido el 17 de abril de 2022 a las 17:33 ----------

asi con este

---------- Post añadido el 17 de abril de 2022 a las 17:34 ----------

perdon, se debe haber generado ZZZ_so~1

---------- Post añadido el 17 de abril de 2022 a las 17:40 ----------

otra cosa, le has dado como fichero de entrada socios.inx que debe de ser el fichero de indices.

Debes de darle el maestro, no se que extension tendra, .fic, .dat

---------- Post añadido el 17 de abril de 2022 a las 17:41 ----------

Desde la linea de comandos:

dir socios.*

manu
17 de abril de 2022, 19:18
Buenas, Gracias nuevamente por responder...

otra cosa, le has dado como fichero de entrada socios.inx que debe de ser el fichero de indices.

Puse .INX porque lo dice en la guía que leí (que pasé en mi respuesta anterior) :confused:

744

Debes de darle el maestro, no se que extension tendra, .fic, .dat

el maestro sería el ejecutable? o el archivo que tiene los datos?

Tengo archivos con extensiones .CBL, .COB, .INX, .SQZ, .OVL y los que no tienen ninguna extensión (que es donde estan los datos "desordenados")


Saludos

manu
17 de abril de 2022, 20:07
Buenas, Gracias nuevamente por responder...



Puse .INX porque lo dice en la guía que leí (que pasé en mi respuesta anterior) :confused:

744



el maestro sería el ejecutable? o el archivo que tiene los datos?

Tengo archivos con extensiones .CBL, .COB, .INX, .SQZ, .OVL y los que no tienen ninguna extensión (que es donde estan los datos "desordenados")


Saludos

ACTUALIZACIÓN:

Bueno... Me di cuenta que al finalizar la ejecución de rmifca me decía que debía COMPILAR y EJECUTAR rmifcb... Así que busqué como se compilaba y encontré que es con rmcobol .....cbl...

Así que compilé y luego ejecuté y funcionó... Al archivo resultante le cambié la extensión a .FQ para poder leerlo con ReadCOBOLFile que me generó un archivo con extensión .FQ.OUT, lo renombre a .TXT y aparentemente me devolvió el resultado esperado... Voy a probar con el resto de los archivos y comento como me fué...

MILLONES DE GRACIAS JCANTERO!

JCantero
17 de abril de 2022, 20:19
Por si tienes que ver mas cosas.

.CBL debe ser el fuente,
.COB el objeto que genera el rmcobol al compilar el fuente .CBL ( el .COB se ejecuta con el runtime)
.INX debe de ser el INDICE del fichero ( y el maestro como norma general tiene extension .DAT o .FIC aunque lo mismo lo tienes sin extension).

.OVL creo que son librerias del runtime.

manu
17 de abril de 2022, 20:35
Bueno estuve revisando el archivo generado y si bien mejoró, sigue teniendo ciertas inconsistencias...

Cómo se puede ver en el archivo -> 745 (tuve q recortarlo porque excedía el tamaño permitido)

1) Se ordenaron los datos, colocando por cada renglón un solo socio..
2) Los distintos campos de cada socio no se encuentran separados por un caracter de manera general, ciertos campos estan separados por una cantidad X de espacios, otros simplemente estan pegados unos a otros... Lo que me complica mucho a la hora de exportarlo a un archivo .csv para poder subirlo a la base de datos nueva...
3) Sigue habiendo renglones de 257 caracteres y otros de menos... Otra complicación para generar el .csv
4) Relacionado a los dos puntos anteriores, en ciertos campos (como el piso por ejemplo) utiliza distinta cantidad de caracteres para representarlo (en # de socio algunos tienen un caracter mas, otros uno menos; en el piso los de Planta Baja tienen PB (dos caracteres) y los de Primer piso simplemente un 1 (un solo caracter)

Teniendo en cuenta esto me pregunto: ¿Cómo logra el programa separar los campos para mostrarmelos en su debido lugar cuando lo ejecuto si no tiene una estandarización entre cada renglón?

Si bien mejoró un poco, me sigue siendo imposible lograr generar un archivo .csv de manera automática...

manu
17 de abril de 2022, 23:12
Una consulta: El programa tiene una función de imprimir todos los datos que se encuentran en esos archivos y de forma ordenada... Hay alguna forma de modificar el código para que en vez de imprimirlos los guarde en un .csv/.txt/.xlsx ? Porque esa sería una forma de realizar lo que necesito...

Gracias..


Acá estan los archivos que entiendo son los encargados de realizar la impresión.... 746

JCantero
17 de abril de 2022, 23:13
Como que lo has recortado ?
Por que ?

No hay que recortarlo.
Pon extención .txt
Abrelo con el bloc de notas o con la excel

El registro de cada socio puede que tenga 256 caracteres o mas. Revisa el fuente o pon aqui la fd del fichero de socios para orientarte.

Lo que envias, aparentemente, como lo has cortado 2 tienes lineas por socio. Cuando es una linea por socio.

Los campos son de ancho fijo, la longitud de cada campo esta en la fd.

Si abres ese fichero, sin cortar, con la excel, lo abres delimitado por longitud variable, vas marcando cada campo, lo tendras en la excel y podras guardarlo en .csv delimitado como quieras, comas, punto y comas, tabuladores, etc..

---------- Post añadido el 17 de abril de 2022 a las 23:19 ----------

Una consulta: El programa tiene una función de imprimir todos los datos que se encuentran en esos archivos y de forma ordenada... Hay alguna forma de modificar el código para que en vez de imprimirlos los guarde en un .csv/.txt/.xlsx ? Porque esa sería una forma de realizar lo que necesito...


No

El TXT lo puedes coger con excel, marcar cada campo, ayudantote de la FD que estará en algun fuente.

Una vez lo tengas en la excel lo puedes guardar en .CSV

---------- Post añadido el 17 de abril de 2022 a las 23:20 ----------

Envia el txt sin cortar y un fuente que tenga la FD y te muestro como hacerlo

---------- Post añadido el 17 de abril de 2022 a las 23:21 ----------

Para generar un .csv directamente hay que hacer la opción 3 que te propuse al principio de este hilo.

---------- Post añadido el 17 de abril de 2022 a las 23:33 ----------




Acá estan los archivos que entiendo son los encargados de realizar la impresión..


Con la FD que has enviado


FD SOCIOS LABEL RECORD IS STANDARD
RECORD CONTAINS 256 CHARACTERS.
01 I-REG-SOCI.
03 I-CVE-SOCI.
05 I-SOCI PIC 9(05).
03 I-APENOM-SOCI PIC X(35).
03 I-CVE-DIR-SOCI.
05 I-DIR-SOCI PIC X(35).
03 I-CODPOS-SOCI PIC 9(04).
03 I-LOCAL-SOCI PIC X(15).
03 I-TE-SOCI PIC X(11).
03 I-CVE-PANTEON-SOCI.
05 I-N-PANTEON-SOCI PIC 99.
03 I-CVE-ZONA.
05 I-ZONA-SOCI PIC 99.
05 I-RUTA-SOCI PIC 9(04).
03 I-CATEG-SOCI PIC 99.
03 I-CVE-NICHO-SOCI.
05 I-N-NICHO-SOCI PIC 9(06).
05 I-N-QUEK-NICH REDEFINES I-N-NICHO-SOCI.
07 I-N-NICHO-3 PIC 9(03).
07 FILLER PIC XXX.
03 I-N-PISO-SOCI PIC XX.
03 I-N-FILA-SOCI PIC 99.
03 KK-CON-FILA REDEFINES I-N-FILA-SOCI.
05 I-1ER-BYTE PIC X.
05 I-2DO-BYTE PIC X.
03 I-CVE-ALTA-SOCI.
05 I-F-ALTA-SOCI PIC 9(06).
05 I-F-ALTA-SOCIX REDEFINES I-F-ALTA-SOCI.
07 I-F-AA-ALTA-SOCI PIC 99.
07 I-F-MM-ALTA-SOCI PIC 99.
07 I-F-DD-ALTA-SOCI PIC 99.
05 I-F-ALTA-SOCIXX REDEFINES I-F-ALTA-SOCI.
07 I-F-AAMM-ALTA-SOCI PIC 9999.
07 FILLER PIC 99.
03 I-ACUM-SOCI PIC S9(12)V99.
03 I-IMP-CTDO-SOCI PIC S9(12)V99.
03 I-IMP-ANTI-SOCI PIC S9(12)V99.
03 I-CAN-CUO-SOCI PIC 99.
03 I-IMP-CUO-SOCI PIC S9(12)V99.
03 I-C-MONEDA-SOCI PIC X.
03 I-F-PRIMER-CUO-SOCI PIC 9(06).
03 FILLER PIC X(46).
03 I-OPER-SOCI PIC X(04).
03 I-F-MODI-SOCI PIC 9(06).


1) Selecciona el TXT sin recortar con la excel,

2) Te pregunta la excel, delimitados o ancho ficho, le das ancho fijo,
3) Le das siguiente,
4) Vas marcando cada campo con su logitud determinada por la fd que te he puesto arriba.
5) Cuando termines, siguiente
6) y ya tienes en excel cada campo en una columna,
7) lo guardas en .csv con las caracteristicas deseadas

---------- Post añadido el 17 de abril de 2022 a las 23:35 ----------

Si hay algun campo de la FD que no entiendas, pregunta.

manu
18 de abril de 2022, 00:20
Como que lo has recortado ?
Por que ?

No hay que recortarlo.
Pon extención .txt
Abrelo con el bloc de notas o con la excel

El registro de cada socio puede que tenga 256 caracteres o mas. Revisa el fuente o pon aqui la fd del fichero de socios para orientarte.

Lo que envias, aparentemente, como lo has cortado 2 tienes lineas por socio. Cuando es una linea por socio.

Los campos son de ancho fijo, la longitud de cada campo esta en la fd.

Si abres ese fichero, sin cortar, con la excel, lo abres delimitado por longitud variable, vas marcando cada campo, lo tendras en la excel y podras guardarlo en .csv delimitado como quieras, comas, punto y comas, tabuladores, etc..

---------- Post añadido el 17 de abril de 2022 a las 23:19 ----------



No

El TXT lo puedes coger con excel, marcar cada campo, ayudantote de la FD que estará en algun fuente.

Una vez lo tengas en la excel lo puedes guardar en .CSV

---------- Post añadido el 17 de abril de 2022 a las 23:20 ----------

Envia el txt sin cortar y un fuente que tenga la FD y te muestro como hacerlo

---------- Post añadido el 17 de abril de 2022 a las 23:21 ----------

Para generar un .csv directamente hay que hacer la opción 3 que te propuse al principio de este hilo.

---------- Post añadido el 17 de abril de 2022 a las 23:33 ----------




Con la FD que has enviado


FD SOCIOS LABEL RECORD IS STANDARD
RECORD CONTAINS 256 CHARACTERS.
01 I-REG-SOCI.
03 I-CVE-SOCI.
05 I-SOCI PIC 9(05).
03 I-APENOM-SOCI PIC X(35).
03 I-CVE-DIR-SOCI.
05 I-DIR-SOCI PIC X(35).
03 I-CODPOS-SOCI PIC 9(04).
03 I-LOCAL-SOCI PIC X(15).
03 I-TE-SOCI PIC X(11).
03 I-CVE-PANTEON-SOCI.
05 I-N-PANTEON-SOCI PIC 99.
03 I-CVE-ZONA.
05 I-ZONA-SOCI PIC 99.
05 I-RUTA-SOCI PIC 9(04).
03 I-CATEG-SOCI PIC 99.
03 I-CVE-NICHO-SOCI.
05 I-N-NICHO-SOCI PIC 9(06).
05 I-N-QUEK-NICH REDEFINES I-N-NICHO-SOCI.
07 I-N-NICHO-3 PIC 9(03).
07 FILLER PIC XXX.
03 I-N-PISO-SOCI PIC XX.
03 I-N-FILA-SOCI PIC 99.
03 KK-CON-FILA REDEFINES I-N-FILA-SOCI.
05 I-1ER-BYTE PIC X.
05 I-2DO-BYTE PIC X.
03 I-CVE-ALTA-SOCI.
05 I-F-ALTA-SOCI PIC 9(06).
05 I-F-ALTA-SOCIX REDEFINES I-F-ALTA-SOCI.
07 I-F-AA-ALTA-SOCI PIC 99.
07 I-F-MM-ALTA-SOCI PIC 99.
07 I-F-DD-ALTA-SOCI PIC 99.
05 I-F-ALTA-SOCIXX REDEFINES I-F-ALTA-SOCI.
07 I-F-AAMM-ALTA-SOCI PIC 9999.
07 FILLER PIC 99.
03 I-ACUM-SOCI PIC S9(12)V99.
03 I-IMP-CTDO-SOCI PIC S9(12)V99.
03 I-IMP-ANTI-SOCI PIC S9(12)V99.
03 I-CAN-CUO-SOCI PIC 99.
03 I-IMP-CUO-SOCI PIC S9(12)V99.
03 I-C-MONEDA-SOCI PIC X.
03 I-F-PRIMER-CUO-SOCI PIC 9(06).
03 FILLER PIC X(46).
03 I-OPER-SOCI PIC X(04).
03 I-F-MODI-SOCI PIC 9(06).


1) Selecciona el TXT sin recortar con la excel,

2) Te pregunta la excel, delimitados o ancho ficho, le das ancho fijo,
3) Le das siguiente,
4) Vas marcando cada campo con su logitud determinada por la fd que te he puesto arriba.
5) Cuando termines, siguiente
6) y ya tienes en excel cada campo en una columna,
7) lo guardas en .csv con las caracteristicas deseadas

---------- Post añadido el 17 de abril de 2022 a las 23:35 ----------

Si hay algun campo de la FD que no entiendas, pregunta.



tuve que cortarlo para subirlo acá... igualmente se muestra bien, con un socio por linea... pero si te fijas, por ejemplo, de la línea 1 hasta la 10 el nro de operacion consiste de 5 caracteres y en las líneas 11 y 12 consiste de 4, luego vuelve a 5... y asi con varios campos...

Intenté hacer lo que me decís con ese archivo pero al no coincidir todos los campos como debería, las columnas agarraban partes de otras... no se si me explico...

Estuve revisando y ese no es el .CBL... es de otro listado q no me sirve.. el que si me sirve no tengo el .CBL (creo q solo tengo el .COB)

De todas formas lo que hice fue imprimir con el PDFCreator a un .TXT y ahi si lo importe al excel y quedo dentro de todo bien pero no llega a ser lo que necesito... es mejor que nada pero no lo que necesito porque lo imprime en dos lineas y por momentos se mezclan ciertos campos...

Sinceramente no logro entender como el COBOL entiende cuando comienza y finaliza un campo si no coinciden en la cantidad de caracteres entre distintos registros...

Te paso -> acá (https://mega.nz/file/N0UEhCrA#GymKVk6YGMIeRwAw_filYNt0b06mvEDiMKaDL_a6O lY)<- todos los archivos del programa a ver si logras entenderlo... Los datos que yo necesito extraer están en los archivos SOCIMANT y SOCIOSER

Estos son los dos archivos TXT recuperados con rmifca y ReadCOBOLFiles -> 747 <-


Gracias por toda la ayuda que me estás brindando... Quería molestar lo menos posible pero ya me está mareando todo esto :llora:

JCantero
18 de abril de 2022, 00:33
Debe de ser problema del readcobolfiles.

Inténtalo con la utilidad mira.

O mejor pásame los ficheros recuperados del rmifca.cob

manu
18 de abril de 2022, 00:46
pásame los ficheros recuperados del rmifca.cob

Aquí están: 748

manu
18 de abril de 2022, 02:15
Debe de ser problema del readcobolfiles.

Inténtalo con la utilidad mira.

Bueno, al final tanto dolor de cabeza y era esto... Un problema en el ReadCOBOLFiles...

Intenté con Mira y quedo EXCELENTE...

Nada más que agradecerte por toda la voluntad y la paciencia que me tuviste... Sos el mejor de los mejores...

Saludos y MUCHISIMAS MUCHISIMAS GRACIAS!@JCantero,

JCantero
18 de abril de 2022, 09:59
Bueno, al final tanto dolor de cabeza y era esto... Un problema en el ReadCOBOLFiles...

Intenté con Mira y quedo EXCELENTE...

Nada más que agradecerte por toda la voluntad y la paciencia que me tuviste... Sos el mejor de los mejores...

Saludos y MUCHISIMAS MUCHISIMAS GRACIAS!@JCantero,

El "mira" es que lo hice yo.

:astro:

manu
18 de abril de 2022, 13:14
El "mira" es que lo hice yo.

:astro:

Ahhh hubiésemos empezado por ahí!!! 👏🏻👏🏻👏🏻👏🏻👏🏻

Un genio total

Nuevamente muchas Gracias, y espero que sigas muy bien!

Saludos y un fuerte abrazo...:yess: