Iniciar Sesión

Ver la Versión Completa : [Duda] Path para búsqueda de archivos


Armando
9 de marzo de 2021, 20:12
Buenas tardes,

Tengo la siguiente consulta:
En una instalación en PowerCobol (7 o superior), necesito que un archivo si no está en la carpeta de ejecución, lo busque en otra carpeta.
Eso en Rmcobol teníamos la posibilidad de usar la variable de ambiente RUNPATH, y con eso encontraba tanto los programas COB como los archivos de la aplicación, que sino estaban en la carpeta de ejecución, los iba a buscar ahí.

set runpath=\SISTEMA1

Entonces en la select solo se ponía el nombre del archivo sin referenciarlo a una carpeta:
SELECT ARDECTRL ASSIGN TO RANDOM "A3300000"
y si no estaba en donde se corre, lo encontraba en SISTEMA1

Alguno de Uds. sabe si eso en PowerCobol se puede lograr de alguna manera, sin obviamente tocar la Select para poner una variable y armar el nombre externo del archivo con el Path?

desde ya muchas gracias,
Nota: probé con @CBR_CBRFILE en el COBOL85.CBR y no anduvo,

Armando

fastpho
9 de marzo de 2021, 22:07
@Armando,
Este es mi select

SELECT CLIENTE
ASSIGN TO ARCLIENTE
ORGANIZATION IS INDEXED
ACCESS IS DYNAMIC
RECORD KEY IS CLI-CLAVE-PRIN
FILE STATUS IS CLI-STAT
LOCK MODE IS AUTOMATIC.

luego en Edita el archivo COBOL85.CBR que debe estar donde esta tu aplicacion , y dentro pone:

[NombredetuPrograma]
ARCLIENTE=c:\sist\archivos\clientes.dnx

Josber
10 de marzo de 2021, 20:32
Una cosa @fastpho,

El archivo COBOL85.CBR, no se puede cambiar de forma dinámica, por lo que el nombre y ruta del archivo, es siempre el mismo, si cambias la ruta de los archivos, ¿cómo lo haces?, es que yo en mi caso, montaba una variable de la WORKING, de tipo GLOBAL EXTERNAL, con la ruta y nombre del archivo, así, si cambias de empresa, en una aplicación que soporte multiempresas, por ejemplo, y las empresas las tienes clasificadas en distintas carpetas, (por ejemplo c:\Programa\Empresa1\Clientes.dat o C:\Programa\Empresa2\Clientes.dat), con abrir y cerrar el archivo, sobra para que coja la nueva ruta, pero, si lo haces de la otra manera, has de salir del programa completamente y volver a ejecutarlo, ¿no?

Un salu2.-

fastpho
10 de marzo de 2021, 20:44
@Josber, Yo tambien lo trabajo con variables directamente en el working , no trabajo con el COBOL85.CBR
, lo que trate es de darle un ayuda de la pregunta que realizo , me parece lo mejor es trabajar con path desde el working con variables globales como detallaste
Saludos

Joseg
11 de marzo de 2021, 11:05
Buenas tardes,

Tengo la siguiente consulta:
En una instalación en PowerCobol (7 o superior), necesito que un archivo si no está en la carpeta de ejecución, lo busque en otra carpeta.
Eso en Rmcobol teníamos la posibilidad de usar la variable de ambiente RUNPATH, y con eso encontraba tanto los programas COB como los archivos de la aplicación, que sino estaban en la carpeta de ejecución, los iba a buscar ahí.

set runpath=\SISTEMA1

Entonces en la select solo se ponía el nombre del archivo sin referenciarlo a una carpeta:
SELECT ARDECTRL ASSIGN TO RANDOM "A3300000"
y si no estaba en donde se corre, lo encontraba en SISTEMA1

Alguno de Uds. sabe si eso en PowerCobol se puede lograr de alguna manera, sin obviamente tocar la Select para poner una variable y armar el nombre externo del archivo con el Path?

desde ya muchas gracias,
Nota: probé con @CBR_CBRFILE en el COBOL85.CBR y no anduvo,

Armando

Também pode usar variáveis de ambiente em Powercobol. Também uso porque acho mais facil. no meu caso com uso tanto ISAM como tabelas em SQL faço assim:


ESPECIAL-NAMES
ENVIRONMENT-NAME IS ENV1
ENVIRONMENT-VALUE IS ENV2
DECIMAL-POINT IS COMMA.
.
.
.
working-storage.
01 WDBTAB pic x(220).
PROCEDURE DIVISION

MOVE SPACES TO WDBTAB
DISPLAY "ARCLIENTE" UPON ENV1 *> Variável "ARCLIENTE"
IF EG-MODSQL = "S"
STRING WACCSQL1 DELIMITED BY " "
"FT2Modelo,EXFH,INF(xeuro.inf)" DELIMITED BY SIZE INTO WDBTAB
ELSE
MOVE "FT2Modelo.dat" TO WDBTAB
END-IF
DISPLAY WDBTAB UPON ENV2
*-----




Para ler o conteúdo de qualquer variável de ambiente:

DISPLAY "ARCLIENTE" UPON ENV1.
ACCEPT WDBTAB FROM ENV2. *> WDBTAB = Conteúdo da variável "ARCLIENTE"



Todas estas defenições apenas estão no módulo principal (MENU.EXE por exemplo)

Armando
12 de marzo de 2021, 14:44
Buen día,
gracias a todos por las respuestas, algunas las conocía como las de usar:
1) una variable en el sistema en lugar del nombre externo en la select y armarlo en cada programa
2) o dentro del cobol85.cbr definir la variable en la instalación del sistema, y modificar la select igual que en el anterior,

La de las variables de ambiente no las probé,

Lo que ya vi que no hay forma, sin tocar el nombre externo en la select, que actúe como el RUNPATH de RMCOBOL, es decir, teniendo en rm lo siguiente:
SELECT CONTROLEX ASSIGN TO RANDOM "A2137020"
y en la ejecución se carge la variable de ambiente
set runpath=\siste2
y el A2137020 no existe en el directorio de ejecución, por defecto lo encuentre en \siste2
Eso implicaba no tocar las select de un montón de programas,

saludos
y de nuevo gracias,