Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Duda] Leer archivos RM Cobol desde PowerCobol (https://www.cobolforo.es/showthread.php?t=244)

Roger 29 de septiembre de 2015 16:54

Leer archivos RM Cobol desde PowerCobol
 
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
Código COBOL:
  1. FD  MAEPROV LABEL RECORD STANDARD.
por
Código COBOL:
  1. FD MAEPROV GLOBAL EXTERNAL LABEL RECORD STANDARD.



Código COBOL:
  1.  SELECT MAEPROV ASSIGN RANDOM "MAEPROV.DAT"
  2.                   ORGANIZATION INDEXED
  3.                   ACCESS DYNAMIC
  4.                   RECORD KEY KEY-PVD
  5.                   ALTERNATE RECORD AL1-PV DUPLICATES
  6.                   FILE STATUS FILE-STATUS.


Código COBOL:
  1. SELECT MAEPROV ASSIGN TO "MAEPROV.DAT"
  2.                   ORGANIZATION INDEXED
  3.                   ACCESS DYNAMIC
  4.                   RECORD KEY KEY-PVD
  5.                   ALTERNATE RECORD AL1-PV DUPLICATES
  6.                   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.

Código COBOL:
  1. 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:

Código COBOL:
  1.     select optional archivo assign to "archivos.dat"
  2.        organization indexed
  3.        acces dynamic
  4.        lock mode is automatic
  5.        record key is archivo-clave
  6.        alternate record key is archivo-clave2 with duplicates
  7.        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
Código COBOL:
  1. select optional archivo assign to "archivos.dat"
  2.        organization indexed
  3.        acces dynamic
  4.        lock mode is automatic
  5.        record key is archivo-clave
  6.        alternate record key is archivo-clave2 with duplicates
  7.        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:
Código COBOL:
  1. 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
Código COBOL:
  1.     01 W-PASE.
  2.         02 W-LINE01 PIC X VALUE X"01".
  3.         02 W-LINE02 PIC X VALUE X"02".
  4.         02 W-LINE03 PIC X VALUE X"03".
  5.         02 W-LINE04 PIC X VALUE X"04".
  6.                 ....
  7.                         02 W-LINE99 PIC X VALUE X"99".
  8.         02 W-LINE00 PIC X VALUE X"00".
  9.     01 TABLA-PASE REDEFINES W-PASE.
  10.         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.


La franja horaria es GMT +2. Ahora son las 04:03.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.