Iniciar Sesión

Ver la Versión Completa : [Duda] Leer archivos RM Cobol desde PowerCobol


Roger
29 de septiembre de 2015, 16:54
Como se lee archivos generados en rmcobol con powercobol un compañero esta migrando su sistema y por el momento necesita trabajar con ambos.

En el anterior foro (ESCOBOL) lei un post donde tenian esta pregunta lamentablemente nunca lo puse en practica.

Kuk
29 de septiembre de 2015, 20:48
Roger, no estoy seguro, pero los ficheros RM no son RMKF como los de PowerCOBOL? Si es así, se puede leer directamente, como si fueran de PowerCOBOL.

Roger
30 de septiembre de 2015, 00:52
Logre leer los archivos grabados en rmcobol cambiando algunos terminos
FD MAEPROV LABEL RECORD STANDARD.
por
FD MAEPROV GLOBAL EXTERNAL LABEL RECORD STANDARD.



SELECT MAEPROV ASSIGN RANDOM "MAEPROV.DAT"
ORGANIZATION INDEXED
ACCESS DYNAMIC
RECORD KEY KEY-PVD
ALTERNATE RECORD AL1-PV DUPLICATES
FILE STATUS FILE-STATUS.


SELECT MAEPROV ASSIGN TO "MAEPROV.DAT"
ORGANIZATION INDEXED
ACCESS DYNAMIC
RECORD KEY KEY-PVD
ALTERNATE RECORD AL1-PV DUPLICATES
FILE STATUS FILE-STATUS.


algunas consideraciones el archivo en rmcobol no debe contener
COMP-6 COMP-3.

pero no puedo grabar-regrabar ni eliminar.

Josber
30 de septiembre de 2015, 07:55
Pureba a poner en la declaración de la FD la cláusula BTRV.

FD MAEPROV GLOBAL EXTERNAL LABEL RECORD STANDARD BTRV.

Las clausulas GLOBAL, EXTERNAL , no son obligatorias, pero si no las pones, te tocará declaral los ficheros en cada "subprograma" que definas en en FORM.

Además, yo pongo también la clausula OPTIONAL, que lo que hace es que si el fichero no existe, lo crea, para evitar errores de STATUS 35.

Ya nos dirás algo

Un saludo.-

Armando
1 de octubre de 2015, 02:00
Hola a todos,

Realmente los archivos de Rmcobol (versión 0), son leidos y actualizados sin problemas por los programas powercobol.
Los cambios en la sintaxis son los que mencionan.
Nosotros además agregamos el LOCK MODE IS AUTOMATIC, para controlar los archivos y los registros lockeados (recomiendo hacer pruebas lockeando con un cobol e intentando acceder desde el otro para ver el comportamiento)
Con respecto al tema de la versión, el rmcobol 7 por defecto utiliza la versión 2 (ponemos RUN-INDEX-FILES DEFAULT-FILE-VERSION-NUMBER=0 en el archivo de configuración). El tema es que si se crean con versión 2, al abrirlos en Power podés leerlos pero al abrirlos para grabar o regrabar va a dar un error 90)
Los COMP-6 no existen en Powercobol, y para leerlos se puede hacer una tabla de conversión para leerlos, y obviamente lo mismo para regrabarlos.
El BTRV no es necesario.

espero que les sirva.
armando

Roger
1 de octubre de 2015, 02:29
Armando
No logro entenderte,los archivos que estoy manipulando fueron creados por rmcobol v5.20 segun lo que manifiestas son versión 0 los puedos leer mas no grabar ni eliminarme manda un error JMW0005I-U THE ERROR OCCURRED IN THE COBOL ERROR REPORT "INTERNAL ERROR=22939"

Me informan que los archivos creados por powercobol se pueden leer por rmcobol
si es asi pasaria la data a power para que se puedan leer, grabar, eliminar por ambas.

Voy a probar luego les informo como me fue.

Kuk
1 de octubre de 2015, 09:25
Armando, qué tipo es realmente el COMP-6 de RM ? Lo mismo que en MicroFocus?

Roger, a veces, cuando el fichero está en grabación y se queda en un bucle, corte de luz o cualquier historia, los ficheros indexados en Power se quedan afectados también y se puede solo leerlos. Lo que yo suelo hacer es un simple programa que lo que hace es coger en lectura el fichero dañado, y escribirlo en uno nuevo registro por registro (en un bucle claramente). No se tarda nada en hacerlo.

Fito
1 de octubre de 2015, 17:46
Roger:

Al principio, cuando estaba pasando de rm85 5.20 a power trabajaba con los dos al mismo tiempo.
Hice los cambios como decis y dicen todos.

por ejmplo:


select optional archivo assign to "archivos.dat"
organization indexed
acces dynamic
lock mode is automatic
record key is archivo-clave
alternate record key is archivo-clave2 with duplicates
file status is st-archivo.


el comp-6 no funciona, pero el comp-3 si, los campos signados necesariamente los dejé comp-3.

Hay que tener cuidado con la definición de claves alternativas. Para leer un archivo creado en rm con power, el orden de definición tiene que ser en el orden que está en el archivo, no sé si me explico.

Y un problema que tuve, es que cuando trabajaba con los archivos en power en rm me daba un error de bloqueo. No insvestigué mucho sobre el tema, porque no usé mucho tiempo los dos sistemas. Así que no sé si ese error se puede salvar.

Saludos...

Roger
2 de octubre de 2015, 01:25
Gracias por su ayuda amigos del foro

Hice la prueba lei el archivo rmcobol con un programa en power cobol y lo volvi a grabar en power, reemplaze este archivo en la carpeta de rmcobol.
Ahora puedo leer, grabar, modificar, eliminar en rmcobol y power
select optional archivo assign to "archivos.dat"
organization indexed
acces dynamic
lock mode is automatic
record key is archivo-clave
alternate record key is archivo-clave2 with duplicates
file status is st-archivo.

con la sintaxis del lock controlo que ambos programas puedan leer a la vez un mismo registro.

agradecimiento a Fanny Ojeda no se que nombre tiene en este foro.
:cockt:

Armando
2 de octubre de 2015, 05:08
Roger
Nosotros creamos archivos tanto desde un lenguaje como del otro, y se leen y se graban indistintamente, pero teniendo la precaucion en rm de que el runtime este configurado con version 0.
Con respecto a los campos signados, optamos por decirle donde va el signo, y usamos:
02 IMPORTE-SLC PIC S9(12)V99 SIGN TRAILING SEPARATE.

Los COMP-3 no los usamos.

Los COMP-6 empezamos a investigar para convertir el archivo de texto byte a byte a numerico, o sea si tenemos por ejemplo:
si el campo comp-6 es de 12, en power seria un alfa de 6 (cada byte representa 2 digitos).
entonces si lees el alfa cada uno de esos 6 bytes representa 2 digitos numericos.
te armas una tabla con los valores hexadecimales para encontrar cada byte leido
01 W-PASE.
02 W-LINE01 PIC X VALUE X"01".
02 W-LINE02 PIC X VALUE X"02".
02 W-LINE03 PIC X VALUE X"03".
02 W-LINE04 PIC X VALUE X"04".
....
02 W-LINE99 PIC X VALUE X"99".
02 W-LINE00 PIC X VALUE X"00".
01 TABLA-PASE REDEFINES W-PASE.
02 ELEM-PASE OCCURS 100 PIC X.

y vas obteniendo los digitos empaquetados.
(nota: tenes que tener en cuenta que tambien estan los campos signados, pero tambien tienen su hexa , o sea vas a tener 10 variables mas para los positivos y 10 mas para los negativos -representacion de c/u de los 10 digitos con signo, recomiendo ver con el editor de archivos del fujitsu los valores decimales)

Resumiendo, se puede y anda bien.
Alguien comentaba el tema del orden de las claves en la select con respecto al orden en la FD. En rm no importa, pero en Power si.

miguelrius
23 de marzo de 2020, 04:19
Armando, qué tipo es realmente el COMP-6 de RM ? Lo mismo que en MicroFocus?

Roger, a veces, cuando el fichero está en grabación y se queda en un bucle, corte de luz o cualquier historia, los ficheros indexados en Power se quedan afectados también y se puede solo leerlos. Lo que yo suelo hacer es un simple programa que lo que hace es coger en lectura el fichero dañado, y escribirlo en uno nuevo registro por registro (en un bucle claramente). No se tarda nada en hacerlo.

Buenas Kuk, tengo un par de dudas con este tema, ya que necesito agregar a una aplicacion en PWC3 la capacidad de reconstruir ficheros dañados ... podrias compartir? desde ya agradecido

Kuk
23 de marzo de 2020, 14:01
Hola miguelrius, pues no puedo compartirlo porque no es un programa genérico.

A lo que me refiero es hacer un programa Cobol con la FD correspondiente a tu fichero, con un fichero en entrada y otro en salida. Y en un bucle, simplemente leer el fichero dañado y escribir los registros uno a uno en el fichero de salida. Eso es todo. ;)