miércoles, 20 de junio de 2007

Traspasar archivos.dat Cobol a .txt

Desde el año 2005 he compartido con bastantes amigos via eMail un procedimiento que tuve que realizar mientras trabajaba en una empresa, el problema era ¿cómo traspasar unos archivos que estaban generados bajo el lenguaje Cobol y con la extensión .DAT?. Pues bién, estuve buscando por internet algún indicio de cómo poder solucionar este problema, pero no encontré lo que yo quería, entonces me puse a analizar los registros abriéndolos con el Block de Notas y/o un programa editor, ahí me percaté que todos tenían un carácter de inicio y fuí probando con Excel, como ya conocía mas o menos cuál era el esquema de registro, pude ir identificando los campos hasta que logré mi propósito.

Los archivos.dat
que he convertido, los paso primero a formato.xls (Excel) y luego se puede proceder a convertirlos en cualquier otro formato, como por ejemplo, traspasarlos a archivos.dbf (Clípper - dBase - Foxpro). En el caso mío, estos archivos.dat han sido generados por programas hechos en Cobol-85 y que luego han sido compilados con RMCOBOL, sin embargo, hay otros COBOL que no dejan los registros de la misma manera que el ejemplo mostrado más abajo, por ejemplo el ACUCOBOL. El asunto es que estos archivos quedan grabados con unos índices que facilitan la captura del registro para su lectura y/o modificación bajo programas COBOL, lo ideal sería contar con otro programa hecho en COBOL y dejarlos grabados secuencialmente bajo formato ASCII, y de allí tomarlos directamente con Excel, siguiendo los pasos detallados mas adelante. Para ello, es necesario contar con cierta información para poder ejecutar este proceso, tal como, esquema del registro, nombres de campos y longitud de cada campo, además se debe indicar cuales de estos campos son de tipo carácter, numérico, fecha, etc. También seria muy conveniente contar con los programas fuentes, porque con ello facilita la tarea de transformar los archivos indexados en secuenciales. Ahora, si no existen programas fuentes, ni tampoco la forma de hacer un pequeño programa que realice este proceso no nos queda mas que proceder de la siguiente manera:

1.- Entrar a Excel y cargar el archivo.dat. Excel te avisará que ese archivo no es de formato conocido y pondrá una ventana ASISTENTE PARA IMPORTAR PASO 1 DE 3, debes marcar DELIMITADOS, y luego, indicar en ORIGEN MS-dos. Enseguida, en el paso 2: donde dice separadores debes marcar OTRO y borrar TABULACION. En OTRO debes digitar una letra o símbolo o signo que represente el largo del registro indicado en código ASCII, por ejemplo, si el largo del registro es de 87 el código ASCII es W, Si el largo es de 174 el código es «, etc. En calificador de texto debes marcar NINGUNO, y pasar al paso siguiente. En el paso3 marcar FINALIZAR.

2.- Excel cargará este archivo y lo mostrará en las 2 o 3 primeras filas, dependiendo de la cantidad de registros que contenga. Cabe hacer notar que el largo del registro no debe exceder de los 255 caracteres porque puede quedar truncado. En la primera fila aparecerá una serie de basura y los datos entremedio. Te posicionas en el primer casillero y empiezas a marcar toda la línea hasta que acaben los datos. Marcas COPIAR. Te posicionas en otra celda dentro de la columna A y marcas PEGADO ESPECIAL, aparecerá otra ventana y marcas TRANSPONER y ACEPTAR.

Los datos deberán aparecer en formato secuencial pero todos desordenados y con alguna basura de por medio, hay que limpiar todos esos registros.

Luego te posicionas en la segunda fila y haces lo mismo que en la primera fila, repitiendo este paso las veces que te aparezcan los datos en las primeras filas. Cada vez que hagas un PEGADO ESPECIAL debes posicionarte debajo del ultimo registro grabado en la columna A. y guardar este archivo como formato.tex (texto con formato delimitado por espacios o como texto MS-DOS ) y luego como formato (Libro de Microsoft – Excel)con otro nombre.

3.- Cerrar todo el Excel y volver a abrirlo, pero ahora llamando al archivo con formato.tex, se volverá a activar la ventana ASISTENTE PARA IMPORTAR PASO 1 DE 3

Pero ahora cargaras el archivo DE ANCHO FIJO y seguir las instrucciones de la ventana en cuestión , marcando el contenido de cada columna que posee el archivo original, vale decir, debes marcar los campos que componen cada registro y Excel te los mostrará por cada columna un campo. Como no tienes información de largo de registro ni los campos que lo compones, es fácil ver el registro, fijándose de manera lógica una secuencia de caracteres, en este caso tu puedes ver por ejemplo que el carácter de longitud del registro es % corres-pondiente al código ASCII 178, según la figura adjunta:

Una cosa importante es que el archivo.dat al cual se quiere transformar tenga todos sus datos en formato ASCII, porque antiguamente, cuando se programaba en COBOL, con el objeto de aprovechar el espacio, cada carácter numérico se grababa en ½ byte, por ejemplo, si teníamos un campo numérico de 10 dígitos internamente quedaban grabados 5 bytes.

Al hacer click en la figura se puede ver en toda la pantalla.





Ojalá que este pequeño proceso te ayude en algo, si es lo que estabas buscando, de lo contrario te sugiero que entres a la página descrita en el siguiente texto:

Cobol File DataViewer by Siber Systems Inc

==========================================

This applications reads Cobol data files and converts them to popular formats such as text-based comma-separated values and any format supported by ODBC: DBF, SQl Server, Oracle, etc.

DataViewer can read all Cobol sequential file, it can also read index and relative files produced by these compilers: ACU, FSC, MF, RM.

Files are read in two different modes:

- When you know record layout and you have it encoded in FDD file.

Open FDD file in this case.

- When you do not know record layout and want DataViewer to guess what it is.

In this case open the data file itself.

More info is available on our web site at

http://www.siber.com/sct/datafile/

Este programa tú lo puedes bajar de internet, pero el único inconveniente que tiene, es que te muestra sólo los primeros 50 registros y no te permite ni grabar ni editar.