Serie ficheros virtuales

 

 


RPG Ficheros virtuales

 

 

 

Funciones de gestión de objetos

 

 

        Estructura de soporte

 

        Relación de prototipos

 

          SRAGM_NEW

 

        SRAGM_NOW

 

        SRAGM_RESIZE

 

        SRAGM_CTRLF

 

        SRAGM_CLRF

 

        SRAGM_ERASE

 

 

                                                                                   ________

 

 

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 de gestión de objetos. Relación de prototipos

 

 

 

      * Genera un fichero virtual. Si existe previamente, lo limpia

 

     DSRAGM_NEW        PR            10I 0                                      Identificador0=Error

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

     D P_DIMC                        10I 0 VALUE                                DIM(TAMAÑO)CLAVES2*I

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

     D P_MAXR                        10I 0 VALUE OPTIONS(*NOPASS)               MAXIMO NUM.ITEMS 4*I

 

 

 

 

      * Genera un fichero virtual, si no existe previamente

 

     DSRAGM_NOW        PR            10I 0                                      Identificador0=Error

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

     D P_DIMC                        10I 0 VALUE                                DIM(TAMAÑO)CLAVES2*I

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

     D P_MAXR                        10I 0 VALUE OPTIONS(*NOPASS)               MAXIMO NUM.ITEMS 4*I

 

 

 

 

      * Reestablece el tamaño máximo de un fichero virtual

 

     DSRAGM_RESIZE     PR            10I 0                                      0/1 ErrorProceso

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

     D P_MaxNreg                     10I 0 VALUE                                NuevoNºMáxRegistrs*I

 

 

 

 

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

 

     DSRAGM_CRTLF      PR            10I 0                                      NID del LF | 0=Error

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

     D P_pPF                           *   VALUE OPTIONS(*STRING)               NombreFichero PF  *I

     D P_KPOS                        10I 0 VALUE                                PosiciónClaveEnPF *I

     D P_KLEN                        10I 0 VALUE                                LongitudClaveDelLF*I

 

 

   

 

      * Limpia un fichero virtual (Vaciado de datos)

 

     DSRAGM_CLRF       PR            10I 0                                      0/1 ErrorProceso

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

     D P_NBorr                       10I 0       OPTIONS(*NOPASS)               NºReg.Borrados   2*O

 

 

 

 

      * Elimina una base de datos virtual

 

     DSRAGM_ERASE      PR            10I 0                                      0/1 Error de proceso

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

 

 

 

 

                                                                                   ________

 

 

 

  SRAGM_NEW. Prototipo

 

 

 

      * Genera un fichero virtual. Si existe previamente, lo limpia

 

     DSRAGM_NEW        PR            10I 0                                      Identificador0=Error

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

     D P_DIMC                        10I 0 VALUE                                DIM(TAMAÑO)CLAVES2*I

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

     D P_MAXR                        10I 0 VALUE OPTIONS(*NOPASS)               MAXIMO NUM.ITEMS 4*I

 

 

 

 

 

Ejemplo

 

 

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

 

 

En este ejemplo se genera un fichero virtual con el nombre que se indica en la variable TTFILE, con tamaño de clave el de la subestructura DS8888c.DSK y de tamaño total el de la estructura DS8888 completa. El número máximo de registros se toma por defecto. Si TTFILE existiera previamente, SRAGM_NEW lo limpia dejando su número de registros a cero. Si se desea respetar el contenido anterior utilícese SRAGM_NOW.

 

TTNID recoge el identificador asignado por el sistema al nuevo fichero.

 

Este ejemplo pertenece al código del programa CC8888, programa principal del banco de pruebas del sistema.

 

 

La creación de un fichero es el paso inicial para poder usarlo, por lo que suele colocarse en la subrutina *INZSR de un programa o en el servicio de apertura de un programa de servicio. En caso de olvido, el resto de las funciones del sistema devolverán respuestas nulas.

 

 

Otros ejemplos de uso serían:

 

 

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

 

 

              En donde el nombre se explicita como la constante 'DS8888'.

 

 

 

 

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

 

 

              En donde se crea un fichero de nombre 'DS8888K', con la peculiaridad de que coincide su tamaño con el de la parte de clave.

              Es el formato que se utiliza para dar soporte a la función auxiliar SRAGM_VER, a la que remitimos para más detalles.

 

 

 

Funciones relacionadas

 

   SRAGM_INF     Recupera estadísticos de un fichero virtual. 

 

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

 

   SRAGM_NID     Recupera el identificador de un fichero virtual. Permite determinar la pre-existencia de un fichero virtual.

 

   SRAGM_NIDFILE Recupera el nombre de un fichero asociado a un identificador.

 

   SRAGM_RESIZE  Cambia el número máximo de registros posibles de un fichero virtual.

    

 

   Además de las versiones para pilas y colas SRAGM_FIFO_NEW, SRAGM_FIFO_NOW, SRAGM_LIFO_NEW y SRAGM_LIFO_NOW.

 

 

                                                                                   ________

 

 

 

  SRAGM_NOW. Prototipo

 

 

 

      * Genera un fichero virtual, si no existe previamente

 

     DSRAGM_NOW        PR            10I 0                                      Identificador0=Error

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

     D P_DIMC                        10I 0 VALUE                                DIM(TAMAÑO)CLAVES2*I

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

     D P_MAXR                        10I 0 VALUE OPTIONS(*NOPASS)               MAXIMO NUM.ITEMS 4*I

 

 

 

 

 

Ejemplo

 

 

              TTNID = SRAGM_NOW(TTFILE:%size(DS8888c.DSK):%size(DS8888c));

 

 

En este ejemplo se genera un fichero virtual con el nombre que se indica en la variable TTFILE, con tamaño de clave el de la subestructura DS8888c.DSK y de tamaño total el de la estructura DS8888 completa. El número máximo de registros se toma por defecto. Si TTFILE existiera previamente, SRAGM_NOW no actuaría. La alternativa SRAGM_NEW garantiza un fichero vacío tras su ejecución.

 

 

SRAGM_NOW internamente ejecuta un SRAGM_NID que si resulta con contenido provoca su terminación y en caso contrario emite un SRAGM_NEW.

 

 

Las notas de SRAGM_NEW son por tanto de aplicación también aquí.

 

 

                                                                                   ________

 

 

 

  SRAGM_RESIZE. Prototipo

 

 

 

      * Reestablece el tamaño máximo de un fichero virtual

 

     DSRAGM_RESIZE     PR            10I 0                                      0/1 ErrorProceso

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

     D P_MaxNreg                     10I 0 VALUE                                NuevoNºMáxRegistrs*I

 

 

 

 

Ejemplo

 

 

              TTErro = SRAGM_RESIZE('DS8888':10000);

 

 

En este ejemplo, se establece el tamaño máximo del fichero 'DS8888' en 10000 registros. Si se alcanza esta cifra, entonces 'DS8888' ya no admitirá más operaciones WRITE.

 

Si no se emite SRAGM_RESIZE, un fichero virtual se crea con un máximo posible de 2.500.000 registros, como se especifica en la rutina núcleo del sistema SRRCM.

 

 

Funciones relacionadas

 

   SRAGM_INF     Recupera estadísticos de un fichero virtual. 

 

   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.

 

 

   Además de las versiones para pilas y colas SRAGM_FIFO_NEW, SRAGM_FIFO_NOW, SRAGM_LIFO_NEW y SRAGM_LIFO_NOW.

 

 

                                                                                   ________

 

 

 

  SRAGM_CRTLF. Prototipo

 

 

 

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

 

     DSRAGM_CRTLF      PR            10I 0                                      NID del LF | 0=Error

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

     D P_pPF                           *   VALUE OPTIONS(*STRING)               NombreFichero PF  *I

     D P_KPOS                        10I 0 VALUE                                PosiciónClaveEnPF *I

     D P_KLEN                        10I 0 VALUE                                LongitudClaveDelLF*I

 

 

 

 

Ejemplo

 

 

               TTFILE01 = %trim(TTFILE) + '01';

 

 

               // CRTPF + CRTLF

 

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

 

               TTNID01 = SRAGM_CRTLF(TTFILE01:TTFILE:%size(DS8888c.DSK) + 1:

                                                     %size(DS8888c.DSK01));

 

 

En este ejemplo, primero se genera un fichero virtual con el nombre que se indica en la variable TTFILE, y a continuación se crea una vista lógica de nombre TTFILE01.

 

La posición de clave de TTFILE01 comienza donde acaba la de la vía de acceso principal, esto es, en [%size(DS8888c.DSK) + 1]

 

El tamaño de clave de la nueva vía de acceso es el de la subestructura DS8888c.DSK01

 

En TTNID01 se recoge el identificador asignado a TTFILE01.

 

Este ejemplo pertenece al código del programa CC8888, programa principal del banco de pruebas del sistema.

 

 

 

Una vez creado, se pueden utilizar indistintamente TTFILE o TTFILE01 en el acceso a los datos. Por ejemplo, anteriormente se han presentado entradas del banco de pruebas relativas a los bucles de prueba de WRITE y de UPDATE en donde se usaban tanto la vía de acceso principal como la vía lógica.

 

 

 

Otro ejemplo de uso sería:

 

 

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

 

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

                                                        %size(DS8888c.DSK01));

 

 

              En donde se crea el fichero 'DS8888' y luego el lógico 'DS888801'.

 

 

 

 

Funciones relacionadas

 

   SRAGM_INF Recupera estadísticos de un fichero virtual. 

 

   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_CLRF. Prototipo

 

 

 

      * Limpia un fichero virtual (Vaciado de datos)

 

     DSRAGM_CLRF       PR            10I 0                                      0/1 ErrorProceso

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

     D P_NBorr                       10I 0       OPTIONS(*NOPASS)               NºReg.Borrados   2*O

 

 

 

 

Ejemplo

 

               TTErro = SRAGM_CLRF('DS888801');

 

 

En este ejemplo se vacía el fichero 'DS888801'. No se recoge el número de registros borrados.

 

Como se ha elegido un fichero que es una vía lógica de la base de datos 'DS8888', realmente se vacía toda ella por completo. Esto es, tanto la vía de acceso principal 'DS8888' como la secundaria 'DS888801'. Si ahora se solicita SRAGM_INF nos devolvería un número de registros nulo para ambas vistas.

 

SRAGM_CLRF vacía de datos un fichero, pero no lo suprime. Si se desea una eliminación completa, utilícese SRAGM_ERASE.

 

 

Como todas las funciones anteriores, también puede encontrarse en CC8888.

 

 

Funciones relacionadas

 

   SRAGM_ERASE Elimina un fichero virtual

 

   SRAGM_INF   Recupera estadísticos de un fichero virtual. 

 

   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_ERASE. Prototipo

 

 

 

      * Elimina una base de datos virtual

 

     DSRAGM_ERASE      PR            10I 0                                      0/1 Error de proceso

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

 

 

 

 

Ejemplo

 

               TTErro = SRAGM_ERASE('DS8888');

 

 

En este ejemplo se elimina el fichero 'DS8888' así como los lógicos relacionados. Si simplemente se desean vaciar los datos sin suprimir los ficheros, utilícese SRAGM_CLRF.

 

 

Este ejemplo también puede encontrarse en CC8888, como en el resto de funciones presentadas en este capítulo.

 

 

Funciones relacionadas

 

   SRAGM_CLRF  Vacía un fichero virtual

 

   SRAGM_INF   Recupera estadísticos de un fichero virtual. 

 

   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.

 

  

                                                                                   ________