La spécif C ILE/RPG-IV

BoTTom |    Changer de couleur
 
 La spécif C en ILE/RPG-IV
 
 RPG  ! RPG-IV  !  signification     !  commentaires
------!---------!--------------------!-----------------------------------
      !         !                    !
 6    !   6     !       C            !
      !         !                    !
7-8   !  7-8    ! Niveau de contrôle !  Lx
      !         !    ou              !
      !         ! Continuation       !   AN/OR
      !         !                    !
9-17  !  9-11   ! Conditions         !  Nxx (un seul indicateur !)
      !         !                    !
      !         !                    !  Mais il est possible d'utiliser
      !         !                    !   des lignes de continuation :
      !         !                    !
      !         !                    !  N24 30       Z-ADD 0       RESULT
      !         !                    ! devient
      !         !                    !  N24
      !         !                    !AN 30          Z-ADD   0        RESULT
      !         !                    !


|    Changer de couleur
18-27 ! 12-25   !  Facteur 1         !  les noms sont à 10, les tableaux
      !         !                    !   indicés à 14 nomtableau(in)
      !         !                    !
28-32 ! 26-35   !  Code opération(O) ! Options possibles :
      !         !                    !  (H) arrondi
      !         !                    !  (N) Read with no lock
      !         !                    !  (P) complémenté (padded) à blanc
      !         !                    !  (D) manipulation d'une date
      !         !                    !  (T)      "       d'une heure
      !         !                    !  (Z)      "       d'un horodatage.
      !         !                    ! (M|R) en V3R70 : idem EXPROPTS
      !         !                    !  (E)  en V4R20 : gestion des erreurs
      !         !                    !
33-42 ! 36-49   !  Facteur 2         ! Toujours 14 positions.
      !         !                    !
43-48 ! 50-63   !  zone résultat     !    "      "     "     .
      !         !                    !
49-51 ! 64-68   !  longueur          ! Définition de la zone résultat
 52   ! 69-70   !  nbr de décimales  !
 53   -----------------------------> ! H,N,P : maintenant (O)
54-59 ! 71-76   !  indics résultants !  >><<==
------!---------!--------------------!--------------------------------------


|    Changer de couleur
 les codes opération : IF, DOU, DOW, WHEN et EVAL utilisent une spécif C
  à facteur 2 étendu (invite SEU IPCX)
 
      ! RPG-IV  !  signification     !  commentaires
      !---------!--------------------!-----------------------------------
      !   6     !       C            !
      !         !                    !
      !  7-8    ! Niveau de contrôle !  Lx
      !         !                    !
      !  9-11   ! Condition          !  Nxx
      !         !                    !
      ! 26-35   !  Code opération(O) ! Options : EVAL(H | M |R), CALLP(E)
      !         !                    !
      ! 36-80   !  Facteur 2 étendu  ! expression en format libre
      !---------!--------------------!-----------------------------------
 Une expression peut occuper plusieurs lignes (sans marque de continuation)
  le format des lignes de continuation sera:
      ! RPG-IV  !  signification     !  commentaires
      !---------!--------------------!-----------------------------------
      !   6     !       C            !
      ! 36-80   !  Facteur 2 étendu  ! suite de l'expression.
      !---------!--------------------!-----------------------------------


|    Changer de couleur
 
 syntaxe générale du code opération EVAL
 
 il s'agit d'un ordre d'affectation (idem à CHGVAR en CL)
 
                         eval      resultat = expression
 
 syntaxe des codes de test (IF, DOU, DOW, et WHEN)
 
                         if        a > B
 
                         dou       a = 0 or x <> Y
 
                         etc ...
 
 à noter la forme suivante
 
                         eval      *in40 = (qte > 0)
 
 qui demande à ce que *in40 recoive le résultat du test QTE > 0
 
                                       (40 = *on si qte plus grand que zéro)


|    Changer de couleur
 Expressions :
 
 -> toute fonction valide (voir plus loin)
 
 -> chaînes de caractères:
 
   + = concatenation entre deux chaînes
 
 -> variables numériques
 
   + , - , * , / = addition , soustraction, multiplication , division
 
   **      = élévation à la puissance
 
 -> tests logiques
 
     = , >= , > , <= , < , <>        (EQ, GE, GT, LE, LT, NE)
      AND , OR , NOT, (, )            (et, ou, non)
 
  un indicateur représente déja un test logique
     C                   dow       not *in03
     C                   if        *in12 and *in50


|    Changer de couleur
 
 Les expressions occupants plusieurs lignes suivent les règles suivantes:
 
 Un caractère de continuation n'est obligatoire que lorsqu'une CONSTANTE
  est scindée sur deux lignes :  (un "+" dans une phrase est ignoré)
 
C                   eval      msg = 'ceci est une constante vraiment très +
C                             longue avec en + un caractère spécial'
 
 Une fonction peut occuper plusieurs lignes
 
C                   eval      taille = %size(
C                                            var1
C                                                 )
 
 Il est conseillé de ne pas scinder au milieu d'un mot.
  ces deux lignes ne sont pas comprises :
C                   eval      result = %subst(%trim(message):1:%size(variab
C                             le))
  ces deux lignes le sont, (et sont plus lisibles) :
C                   eval      result = %subst(%trim(message) : 1 :
C                                              %size(variable)    )


|    Changer de couleur
 
 Quelques exemples :
 
     C                   if        (codetarif = '1' or codetarif = '2')
     C                                and *in90
     C                   ...
     C                   endif
 
      * tests multiples
     C                   select
     C                   when      codfacture='CH'
     C                    ...
     C                    ...
     C                   when      codfacture = 'ES'and devise = 'EUR'
     C                    ...
     C                   DOU        ecart = 0
     C                     ..
     C                     ..
     C                   ENDDO
     C
     C                   endsl
 


|    Changer de couleur
 Fonctions reconnues : 
 fonction   !    argument   ! type retour   !   signification
 -----------!---------------!---------------!------------------------------
 %ADDR      !    variable   !    pointeur   !   adresse de la variable
            !               !               !
 %PADDR     !    procédure  ! proc-pointeur !   utilisable par CALLB
            !               !               !
 %ELEM      !    Tableau    !   numérique   !   nombre de postes
            !DS à occurences!               !   nombre d'occurences
            !               !               !
 %SIZE      !  variable     !   numérique   !   taille de la variable
            !  tableau      !               !   taille d'un poste
            !  tableau:*ALL !               !   taille du tableau
            !               !               !
 %SUBST     ! (var:deb:lg)  !    chaîne     !   extrait une chaîne
            !  ..........................................................
            !  : if %subst(raisoc : 1 : 1) <> ' '            |1er car.  :
            !  :                                             |          :
            !  : if %subst(raisoc : %size(raisoc) : 1) <> ' '|dernier   :
            !  :                                             |          :
            !  : eval %subst(pgm : 1 : 1) = 'Q'              |          :
            !  :.......................................................>:


|    Changer de couleur
 fonction   !    argument   ! type retour   !   signification
 -----------!---------------!---------------!------------------------------
 %TRIM      ! chaîne        !    chaîne     ! supprime les blancs extrèmes
            !               !
 %TRIML     ! chaîne        !    chaîne     ! supprime les blancs de gauche
            !               !
 %TRIMR     ! chaîne        !    chaîne     ! supprime les blancs de droite
            !               !               !
 %PARMS     !    (aucun)    !   numérique   ! nombre de paramètres recus.
            !               !               !
            !  .............................
            !  :  if    %parms > 2         :
            !  :  eval   wp3 = p3          :
            !  :...........................:
            !               !               !
 Fonctions V3R70 : 
 %ABS       !    variable   !    numérique  !   valeur absolue
            !               !               !
 %DEC       !  num : precis.!    packé      !   précision indiquée en
 %DECH      !               !               !  argument (%DECH = arrondi)
            !               !               !
 %DECPOS    !    numérique  !   numérique   !   nombre de décimales


|    Changer de couleur
 fonction   !    argument   ! type retour   !   signification
 -----------!---------------!---------------!------------------------------
            !               !               !
 %EDITC     !  num : editcod!   chaîne      !   retourne le chiffre édité
            ! ........................................................
            ! :  exemple :        eval msg = 'date de traitement' +  :
            ! :                         %editc(date : 'Y')           :
            ! :                                                      :
            ! :                   eval montanchar = %editc(          :
            ! :                                     qte * prix : '3'):
            ! :......................................................:
            !               !               !
 %EDITFLT   ! scientifique  !    chaîne     !  retourne le chiffre édité
            !               !               !
 %EDITW     ! num : editword!    chaîne     !  retourne le chiffre édité
            !               !               !
            !               !               ! (mais avec un mot d'édition)
            !               !               !
 %FLOAT     !    numérique  ! scientifique  !   conversion
            !               !               !
 %INT       !    numérique  !   binaire     !   conversion
 %INTH      !               !    signé      !           (%INTH = arrondi)


|    Changer de couleur
            !               !               !
 %UNS       !    numérique  !   binaire     !   conversion
 %UNSH      !               !  non signé    !           (%UNSH = arrondi)
            !               !               !
 %LEN       !   expression  !   numérique   !   longueur
            !               !               !
 %STR       !   pointeur    !    chaîne     !  gestion des chaînes à
            !               !               ! terminaison 0 (langage C)
            !               !               !
 %SCAN      !ch1:ch2 [:dep] !   numérique   ! recherche si ch1 est dans ch2
            !               !               ! à partir de 'dep'
            !               !               !
            !               !               ! si oui l'information retournée
            !               !               !  est la position.
            !               !               !
          ................................................................
          :   exemple :      eval chaine = 'ILE/RPG-IV'                  :
          :                  eval pos = %scan('I' : chaine)      [pos=1] :
          :                  eval deb = pos + 1                          :
          :                  eval pos = %scan('I' : chaine: deb) [pos=9] :
          :..............................................................:
 


|    Changer de couleur
 fonction   !    argument   ! type retour   !   signification
 -----------!---------------!---------------!------------------------------
 %NULLIND   !    variable   ! indicateur    !   test ou assignation de la
            !               ! (*ON ou *OFF) !    valeur nulle.
 
  en effet RPG-IV supporte les variables à valeur nulle (ALWNULL en SDD)
 
   [il faut compiler avec ALWNULL(*USRCTL).]
 
 
  les tests se font sous la forme
 
      IF %NULLIND(datcmd) = *ON
 
  l'affectation :
 
      EVAL  %NULLIND(PRIME) = *ON
 
ou bien
      EVAL %NULLIND(prime) = *OFF
 puis 
      EVAL prime = 1500


|    Changer de couleur
 
pour l'accès direct avec val. nulle, précisez un indicateur sur les clés :
 
     C     cle01         Klist
     C                   kfld                    zone1
     C                   kfld      *in40         zone2
     C                   kfld      *in41         zone3
 
     c                   EVAL      zone1 = 'ABC'
     c                   EVAL      zone3 = 'X'
     C                   EVAL      *in40 = *ON
     C                   EVAL      *IN41 = *OFF
     C     cle01         CHAIN     fichier
 
 on cherche un enregistrement avec zone1 = ABC, zone2 nulle, zone3 = X
 
     C                   EVAL       *IN41 = *ON
     C     cle01         CHAIN     fichier
 
 on cherche un enregistrement avec zone1 = ABC, zone2 et zone3 nulles.
                                           (le contenu de zone3 est ignoré)
 





©AF400