Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Duda] Path para búsqueda de archivos (https://www.cobolforo.es/showthread.php?t=1279)

Armando 9 de marzo de 2021 20:12

Path para búsqueda de archivos
 
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:
Código COBOL:
  1. 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
Código COBOL:
  1. SELECT CLIENTE
  2.          ASSIGN TO ARCLIENTE
  3.          ORGANIZATION IS INDEXED
  4.          ACCESS IS DYNAMIC
  5.          RECORD KEY IS CLI-CLAVE-PRIN
  6.          FILE STATUS IS CLI-STAT
  7.          LOCK MODE IS AUTOMATIC.
luego en Edita el archivo COBOL85.CBR que debe estar donde esta tu aplicacion , y dentro pone:
Código COBOL:
  1. [NombredetuPrograma]
  2. 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

Cita:

Citación del post de Armando (Mensaje 6526)
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:
Código COBOL:
  1. 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:

Código COBOL:
  1.        ESPECIAL-NAMES
  2.            ENVIRONMENT-NAME  IS ENV1
  3.            ENVIRONMENT-VALUE IS ENV2
  4.            DECIMAL-POINT IS COMMA.
  5. .
  6. .
  7. .
  8.  working-storage.
  9.  01 WDBTAB         pic x(220).
  10.  PROCEDURE DIVISION
  11.  
  12.             MOVE SPACES TO WDBTAB        
  13.             DISPLAY "ARCLIENTE" UPON ENV1   *> Variável "ARCLIENTE"
  14.             IF EG-MODSQL = "S"
  15.                 STRING WACCSQL1 DELIMITED BY "   "  
  16.                       "FT2Modelo,EXFH,INF(xeuro.inf)" DELIMITED BY SIZE INTO WDBTAB
  17.             ELSE
  18.                      MOVE "FT2Modelo.dat" TO WDBTAB
  19.            END-IF
  20.             DISPLAY WDBTAB UPON ENV2
  21.      *-----
  22.  

Para ler o conteúdo de qualquer variável de ambiente:
Código COBOL:
  1.            DISPLAY "ARCLIENTE" UPON ENV1.
  2.            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:
Código COBOL:
  1. 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,


La franja horaria es GMT +2. Ahora son las 12:15.

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