Serie ficheros virtuales

 

 


RPG Ficheros virtuales

 

 

 

Funciones  del grupo informativo y de control

 

 

        Estructura de soporte

 

        Relación de prototipos

 

          SRAGM_INF

 

        SRAGM_NAME

 

        SRAGM_NID

 

        SRAGM_NIDFILE

 

        SRAGM_VERDBR

 

 

                                                                                   ________

 

 

 

Estructura de soporte

 

 

A lo largo de este manual dedicado a los servicios de SRAGM, se irán ilustrando los procedimientos utilizando la estructura de datos DS8888c, que se compone de una subestructura de clave principal, una subestructura de clave alternativa y una subestructura de datos, que se detallan a continuación:

 

 

      **********************************************************************************************

      *  DS8888   *  Banco de pruebas de SRAGM

      **********************************************************************************************

 

      ***

      * *  Definición fichero virtual DS8888

      ***

     D DS8888c         DS                  QUALIFIED BASED(pDS8888c)            Soporte  DS8888

     D  DSK                                LIKEDS(DSCc)                         ClavesPF DS8888

     D  DSK01                              LIKEDS(DSC01c)                       ClavesLF DS8888

     D  DSD                                LIKEDS(DSDc)                         Datos    DS8888

 

      ***

      * *  Definición claves PF (Es la definición de una red [I,J], como en la emulación de una hoja de cálculo)

      ***

     D DSCc            DS                  QUALIFIED BASED(pDSCc)

     D  I                            10S 0                                      I

     D  J                            10S 0                                      J

 

      ***

      * *  Definición claves LF (Orden inverso)

      ***

     D DSC01c          DS                  QUALIFIED BASED(pDSC01c)

     D  JI                           10S 0                                      N*N - IJ + 1

 

      ***

      * *  Definición datos fichero virtual DS8888

      ***

     D DSDc            DS                  QUALIFIED BASED(pDSDc)

     D  IJ                           10S 0                                      N*(I-1) + J

     D  IMPT                         10S 0                                      [100000]+N*(I-1) + J

      * La constante [100000] se añadirá/retirará en los UPDATE de prueba

 

 

 

 

DS8888 es una definición tipo. Está basada en punteros nulos y para usarse debe instanciarse con una instrucción LIKEDS. Esto puede apreciarse en el juego entre el programa CC8888 y el programa de servicio SRAGMV.

 

 

                                                                                   ________

 

 

 

 

   Funciones del grupo informativo y de control

 

 

 

 

      * Recupera información estadística de un fichero ("DSPFD")

 

     DSRAGM_INF        PR            10I 0                                      0/1 ErrorDeProceso

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_DIMC                        10I 0 OPTIONS(*NOPASS)                     DIM CLAVES       2*O

     D P_DIMD                        10I 0 OPTIONS(*NOPASS)                     DIM DATOS        3*O

     D P_NITEM                       10I 0 OPTIONS(*NOPASS)                     NºITEMS          4*O

     D P_NBAJAS                      10I 0 OPTIONS(*NOPASS)                     NºBAJAS          5*O

     D P_NITD                        10I 0 OPTIONS(*NOPASS)                     NºITEMS Disponibl6*O

 

 

 

  

      * Interfaz de SRRCW_NAME para uso RPG

 

     DSRAGM_NAME       PR              *                                        NombreDepuradoTipRPG

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               NombreFicheroDado *I

 

 

 

 

      * Recupera el NID asociado a un fichero virtual

 

     DSRAGM_NID        Pr            10I 0                                      Identificador 0=Erro

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               NombreFicheroDado *I

 

 

 

 

      * Devuelve el nombre asociado a un NID s/relación de enlace de nombres y NID's

 

     DSRAGM_NidFile    Pr              *                                        NombreAsociadoAlNID

     D P_NID                         10I 0 VALUE                                IdentificadorDeFile

 

 

 

 

      * Evalúa si un nombre de fichero (lógico) tiene dbr asociada.

 

     DSRAGM_VERDBR     PR            10I 0                                      Nid del PF asociado

     D P_pLF                           *   VALUE OPTIONS(*STRING)               NombreFichero(LF) *I

     D P_pPF                           *   VALUE OPTIONS(*STRING)               NombreFicheroPF(O)*I

 

 

 

                                                                                   ________

 

 

 

 

  SRAGM_INF. Prototipo

 

 

 

 

      * Recupera información estadística de un fichero ("DSPFD")

 

     DSRAGM_INF        PR            10I 0                                      0/1 ErrorDeProceso

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_DIMC                        10I 0 OPTIONS(*NOPASS)                     DIM CLAVES       2*O

     D P_DIMD                        10I 0 OPTIONS(*NOPASS)                     DIM DATOS        3*O

     D P_NITEM                       10I 0 OPTIONS(*NOPASS)                     NºITEMS          4*O

     D P_NBAJAS                      10I 0 OPTIONS(*NOPASS)                     NºBAJAS          5*O

     D P_NITD                        10I 0 OPTIONS(*NOPASS)                     NºITEMS Disponibl6*O

 

 

 

 

 

Ejemplo

 

 

         TTErro = SRAGM_INF('DS8888':TTDimC:TTDimD:TTNitem:TTNBajas);

         TTNeto = TTNitem - TTNBajas;

 

 

En este ejemplo se recuperan los estadísticos globales del fichero virtual 'DS8888'.

 

TTErro recoge la marca de error, vendría activa en caso de no existir 'DS8888' previamente.

 

TTDimC se rellena con el tamaño de la clave del fichero. En nuestro caso %size(DS8888c.DSK).

 

En TTDimD se recoge el tamaño de los datos del fichero. En nuestro caso %size(DS8888c).

 

La razón de estos valores es que 'DS8888' se creó con la instrucción TTNID = SRAGM_NEW('DS8888':%size(DS8888c.DSK):%size(DS8888c));

 

 

Por último, TTNitem tomará el valor del número total bruto de ítems en el fichero, incluidos los elementos suprimidos y TTNBajas precisamente el número de elementos suprimidos.

 

Por tanto, la instrucción complementaria TTNeto = TTNitemTTNBajas proporcionará el número de ítems neto. Si se emite un SRAGM_REORGANIZ, TTNBajas resultaría nulo y el número de ítems neto coincidirá con el bruto. Pero este extremo no es necesario en la mayoría de situaciones prácticas, solo en casos muy particulares puede convenir depurar los elementos suprimidos para mejorar el rendimiento, de forma significativa.

 

Este ejemplo pertenece al código del programa CC8850, programa cabecera del ejemplo de mantenimiento de DS8888 registro a registro.

 

 

 

Funciones relacionadas

 

   SRAGM_NEW        Crea un fichero virtual. Si existe previamente lo limpia.

 

   SRAGM_NOW        Tiene el mismo funcionamiento que SRAGM_NEW, pero no limpia datos previos si hay pre-existencia.

 

   SRAGM_REORGANIZ  Reorganiza un fichero virtual depurándole de registros suprimidos

 

 

                                                                                   ________

 

 

 

  SRAGM_NAME. Prototipo

 

 

  

      * Interfaz de SRRCW_NAME para uso RPG

 

     DSRAGM_NAME       PR              *                                        NombreDepuradoTipRPG

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               NombreFicheroDado *I

 

 

 

 

 

 

Ejemplo

 

 

      *

      * SRAGM_NAME

     D TTFILE          S             33    BASED(pTTFILE)

 

     . . .

 

 

 

     // Asigna la constante del nombre a una variable nombre estandarizada

 

     pTTFILE = SRAGM_NAME('DS8888');

 

 

 

 

En este ejemplo se asigna el literal 'DS8888' a la variable normalizada TTFILE.

 

 

Esta instrucción no se precisa para un uso del sistema inmerso en RPG, sólo es necesaria en usos especiales conjuntos de C y RPG.

 

 

 

                                                                                   ________

 

 

 

  SRAGM_NID. Prototipo

 

 

 

      * Recupera el NID asociado a un fichero virtual

 

     DSRAGM_NID        Pr            10I 0                                      Identificador 0=Erro

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               NombreFicheroDado *I

 

 

 

 

Ejemplo

 

 

   TTNID = SRAGM_NID('DS8888');

 

 

 

Con esta instrucción se recupera el identificador asociado al fichero virtual 'DS8888' si existe.

 

En consecuencia, SRAGM_NID es el método más sencillo para determinar la pre-existencia de un fichero virtual.

 

 

 

Funciones relacionadas

 

   SRAGM_INF      Recupera estadísticos de un fichero virtual. 

 

   SRAGM_NEW      Crea un fichero virtual. Si existe previamente lo limpia.

 

   SRAGM_NidFile  Devuelve el nombre asociado a un NID.

 

   SRAGM_NOW      Tiene el mismo funcionamiento que SRAGM_NEW, pero no limpia datos previos si hay pre-existencia.

 

 

                                                                                   ________

 

 

 

  SRAGM_NIDFILE. Prototipo

 

 

 

      * Devuelve el nombre asociado a un NID según la relación de enlace de nombres y NID's

 

     DSRAGM_NidFile    Pr              *                                        NombreAsociadoAlNID

     D P_NID                         10I 0 VALUE                                IdentificadorDeFile

 

 

 

 

Ejemplo

 

 

      *

      * SRAGM_NAME

     D TTFILE          S             33    BASED(pTTFILE)

      *

      * SRAGM_NEW

     D TTNID           S             10I 0

      *

      * DS8888

     D/COPY QRPGLESRC,COCCD_8888

 

 

 

     . . .

 

 

     // Crea el fichero virtual 'DS8888'

  

     TTNID = SRAGM_NEW('DS8888':%size(DS8888c.DSK):%size(DS8888c));

 

     . . .

 

 

     // Asigna el nombre asociado al NID de 'DS8888' a una variable nombre estandarizada

 

     pTTFILE = SRAGM_NidFile(TTNID); // TTFILE contiene ahora 'DS8888' precisamente

 

 

 

Con esta instrucción se asigna el nombre asociado a la variable TTNID a la variable alfanumérica estandarizada TTFILE.

 

 

 

Funciones relacionadas

 

   SRAGM_INF   Recupera estadísticos de un fichero virtual. 

 

   SRAGM_NEW   Crea un fichero virtual. Si existe previamente lo limpia.

 

   SRAGM_Nid   Recupera el NID asociado a un fichero virtual.

 

   SRAGM_NOW   Tiene el mismo funcionamiento que SRAGM_NEW, pero no limpia datos previos si hay pre-existencia.

 

 

                                                                                   ________

 

 

 

 

  SRAGM_VERDBR. Prototipo

 

 

 

      * Evalúa si un nombre de fichero (lógico) tiene dbr asociada.

 

     DSRAGM_VERDBR     PR            10I 0                                      Nid del PF asociado

     D P_pLF                           *   VALUE OPTIONS(*STRING)               NombreFichero(LF) *I

     D P_pPF                           *   VALUE OPTIONS(*STRING)               NombreFicheroPF(O)*I

 

 

 

 

Ejemplo

 

 

      *

      * SRAGM_VERDBR

     D TTFILE          S             33   

      *

      * SRAGM_NEW

     D TTNID           S             10I 0

     D TTNID01         S             10I 0

 

      *

      * DS8888

     D/COPY QRPGLESRC,COCCD_8888

 

 

     . . .

 

 

     // Crea el fichero virtual 'DS8888' y su lógico

  

     TTNID = SRAGM_NID('DS8888');

     if TTNID = *ZEROS;

 

        TTNID = SRAGM_NEW('DS8888':%size(DS8888c.DSK):%size(DS8888c));

        TTNID01 = SRAGM_CRTLF('DS888801': 'DS8888':%size(DS8888c.DSK) + 1:

                                                   %size(DS8888c.DSK01));

     endif;

 

     . . .

 

 

     // Verifica si 'DS888801' es un lógico de alguna base de datos virtual

 

     TTNID01 = SRAGM_VerDbr('DS888801':%addr(TTFILE)); // TTFILE contiene ahora 'DS8888' precisamente

 

 

 

Con esta instrucción se verifica que 'DS888801' forma parte efectivamente de una base de datos virtual y además recupera el nombre del fichero base ('DS8888').

 

 

 

Funciones relacionadas

 

   SRAGM_CRTLF     Crea un "lógico" en base a un fichero virtual "físico" previo

 

   SRAGM_INF       Recupera estadísticos de un fichero virtual. 

 

   SRAGM_NEW       Crea un fichero virtual. Si existe previamente lo limpia.

 

   SRAGM_Nid       Recupera el NID asociado a un fichero virtual.

 

   SRAGM_NidFile   Devuelve el nombre asociado a un NID.

 

   SRAGM_NOW       Tiene el mismo funcionamiento que SRAGM_NEW, pero no limpia datos previos si hay pre-existencia.

 

 

                                                                                   ________