Nouveautés V5R20 du compilateur ILE/RPG-IV

BoTTom |    Changer de couleur
 
 RPG-IV en V5R20 :
 
 
 ° transformation directe de chaines en numérique (%DEC, %INT , etc...)
 
 ° Nombreuses améliorations sur les DS :
 
     - DIM admis
     - DS dans une DS, ...
     - DS par copie d'un format, plus souple.
 
 ° nouvelles fonctions de manipulation de bits
 
 ° une clé complexe peut être indiquée sur le CHAIN (sans KLIST)
 
 ° une liste des zones à mettre à jour peut être indiquée sur UPDATE
 
 ° nouveaux opérateurs += , -= , *= , /= (expressions en format libre)
 
 
 


|    Changer de couleur
 
 Data Structures :
 
 - rappels V5R10
 
   QUALIFIED, permet de manipuler une DS par nomDS.nomdezone
 
   LIKEDS   , permet de créer une DS identique à une autre
              (QUALIFIED implicite)
 
 
 - le mot clé DIM est admis sur les DS (QUALIFIED obligatoire)
 
     D test            DS                  DIM(20) QUALIFIED
     D  zone1                         4
     D  zone2                         3  0
 
 puis manipulation par
      /free
        x += 1 ;                  // <- nouveauté V5R20, voir plus loin.
        test(x).zone1 = 'toto';
      /end-free


|    Changer de couleur
 
 - le mot clé LIKEDS est admis sur une sous-zone 
 
        > Dim est admis, pour des tableaux à n dimensions
        > ALTSEQ est "hérité" de la DS d'origine
        > OCCURS et INZ ne le sont PAS ==> utiliser INZ(*likeds)
 
     D test1           DS
     D  zone1                         4
     D  zone2                         3  0
 
     D test2           DS                  QUALIFIED
     D  zonea                         4
     D  zoneb                         3  0
     D  zonec                              LIKEDS(test1)
 
 puis manipulation par
      /free
        test1.zone1 = 'toto';
        test2.zonec.zone1 = 'truc';
      /end-free
 


|    Changer de couleur
 
 pour déclarer une DS "modèle", uniquement pour utilisation avec LIKEDS :
 
     D wptr            S               *
     D test1           DS                  based(wptr)
        ...
      /free
         test2.zonec.zone1 = 'truc';
         // ATTENTION : test1.zone1 = 'toto' ==> PLANTE le pgm !
      /end-free
 
exemple :
     Dptr              S               *
     Dds_dep           DS                  based(ptr)
     D depnom                        25
     D ca                            13  2
 
     Dregions          DS                  qualified dim(50)
     D numero                         3  0
     D nom                           25
     D depart                              likeds(ds_dep) dim(9)
 


|    Changer de couleur
     D I               s             10I 0
     D J               s             10I 0
 
      /free
        for i = 1 to %elem(regions) ;
            for j = 1 to %elem(regions.depart) ;
              regions(i).depart(j).ca = i*j;
            endfor;
        endfor;
        *inlr = *on;
      /end-free
 ...................... en debug .............................
 : EVAL regions                                               :
 : REGIONS.NUMERO(1) =    .                                   :
 : REGIONS.NOM(1) = '                         '               :
 : REGIONS.DEPART.DEPNOM(1,1) = '                         '   :
 : REGIONS.DEPART.CA(1,1) = 00000000001.00                    :
 : REGIONS.DEPART.DEPNOM(1,2) = '                         '   :
 : REGIONS.DEPART.CA(1,2) = 00000000002.00                    :
 : REGIONS.DEPART.DEPNOM(1,3) = '                         '   :
 : REGIONS.DEPART.CA(1,3) = 00000000003.00                    :
 :............................................................:


|    Changer de couleur
 
 - le mot clé LIKEREC permet une définition de DS par copie d'un format
   (déclaré en specif F), et avec choix des zones à copier.
 
   LIKEREC(nom-format : *ALL | *OUTPUT | *INPUT | *KEY)
 
           *ALL    copie de toutes les zones.
           *INPUT  les zones en entrée (comme les DS externes)
           *OUTPUT les zones en sorties
           *KEY    uniquement les zones clés.
 
           cette dernière option permet : CHAIN %KDS(nom-ds) fichier
 
 
 -   modification des ordres de lecture (CHAIN, READ, etc...)
 
     - les ordres de lecture admettent un nom de DS en dernier argument
       (format libre uniquement), permettant de placer la lecture
       automatiquement dans une DS (avant c'était possible, mais en interne)
 
       READ  format   nom-de-ds ;
 


|    Changer de couleur
 
     - CHAIN, READE, SETLL, SETGT, DELETE
 
        admettent une définition de clé complexe, comme suit :
 
 
       CHAIN Klist fichier;
 
       CHAIN (zone1 : zone2 : zone4) fichier ;
 
       CHAIN %KDS(nom-de-DS) ; // (créé par LIKEREC(*KEY) ou non)
 
 
 
 
     - UPDATE admet une liste des zones à modifier (pour modif partielle)
               avec la fonction %FIELDS() 
 
 
       UPDATE format  %FIELDS(zone1 : zone2 : zone4) ;
 
 


|    Changer de couleur
 -   transformation numérique, les fonctions :
 
     %DEC , %DECh , %INT, %INTh, %UNS , %UNSh , %FLOAT admettent un
      argument de type chaine et le transforment en numérique.
 
     les signes + et - sont admis à gauche ou à droite.
     la marque décimale peut être , ou . 
     les espaces sont ignorés.
 
      /free
        R = %dec('+ 3,25') + 1; // retourne 4,25
      /end-free
 
 
 -   fonctions de manipulation de bits
     (manipulation d'attributs d'affichage ou fonctions réseau) :
 
     %BITNOT()    inverse les bits
 
         %BITNOT(x'00') = x'FF'
 
     %BITOR()     applique un OU logique, bit à bit


|    Changer de couleur
 
         %BITOR(x'F0' : x'0F') = x'FF'
 
     %BITAND()    applique un ET logique, bit à bit
 
         %BITAND(x'F1' : x'1F') = x'11'
 
     %BITXOR()    applique un ET exclusif, bit à bit
 
         %BITXOR(x'F1' : x'1F') = x'EE' :       1111 0001
                                                0001 1111
                                               ----------
                                                1110 1110
 
 -   DTAARA(*VAR : ), le nom de la data-area peut être une variable.
 
        DATAARA(MADA) : on utilise MADA dans *LIBL
 
        DATAARA(*VAR:MADA) : on utilise le contenu de la variable RPG "MADA"
 
 -   les zones numériques acceptent un maximum de 31 chiffres
     (avant c'était 30), RPG devenant pleinement compatible avec DB2/400.


|    Changer de couleur
 
 -   on admet de nouveaux opérateurs, dans les expressions :
 
       +=   : x += 1 identique à x = x + 1
 
       -=   : x -= 1             x = x - 1
 
       *=   : x *= 2             x = x * 2
 
       /=   : x /= 2             x = x / 2
 
     uniquement valide dans les expressions en format libre.
 




©AF400