
a l'éxécution de mon RPGLE j'ai le message :
le %scanrpl n'existant pas dans ma version j'utilise un %scan puis un %replace.longueur ou position de départ hors limites pour opération sur chaine
en ligne 106
quelqu'un voit il une grosse bourde dans mon code :
Code : Tout sélectionner
1 H debug alwnull(*Usrctl)
* Définition parm pgm.
D P_CodePays S 2
D P_ClefIban S 2
D P_CodeBban S 30
D P_Retour S 2
D Z1 S 10
10 * Déclaration variables locales.
D L_CompLeNu C 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456+
D 789'
D
D L_IbanAvant S 34
* au maximum il y a 66 car car si iban est tout en lettres il y a 34 - 2 p
* qui sont doublés donc (32*2)+2
01* mais la limite est de 63 donc tester le nbre de caracteres de l'iban pou
* RNF0503E L'élément numérique comporte plus de 63 chiffres (63 pris par d
D L_IbanApres S 66
D L_IbanAsNum S 63 0
D L_CodePaysA S 2
D L_ClefIbanA S 2
D L_CodeBbanA S 30
D L_I S 2 0
D L_Pos S 2 0
D DS
D L_TblLet Dim(26)
D L_TzoLet 1 Overlay(L_TblLet:*next)
D L_Let C 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
D L_ZonLet S 1
D DS
D L_TblChi Dim(26)
D L_TzoChi 2 0 Overlay(L_TblChi:*next)
D L_ZonChi S 2
C *Entry Plist
C Parm P_CodePays
C Parm P_ClefIban
C Parm P_CodeBban
C Parm P_Retour
C Eval P_Retour = 'KO'
* enlever les blancs
C EvalR L_CodePaysA = %Trim(P_CodePays)
C EvalR L_ClefIbanA = %Trim(P_ClefIban)
C EvalR L_CodeBbanA = %Trim(P_CodeBban)
* concatener de l'iban
C Eval L_IbanAvant = L_CodeBbanA + L_CodePaysA
C + L_ClefIbanA
* Tous les caractères autres que chiffres et lettres sont invalides pour u
C If Not ( %Check(L_CompLeNu:L_IbanAvant) = 0 )
C EVAL *inlr = *on
C EndIf
* charger des lettres
C Eval L_TblLet = L_Let
* charger des chiffres
C Eval L_I = 1
C Dow L_I <= 26
C Eval L_TzoChi(L_I) = L_I + 9
C Eval L_I = L_I + 1
C Enddo
* stocker l'iban dans la zone de travail a parcourir
C Eval L_IbanApres = L_IbanAvant
* initialiser les indices et compteur de positions
C Eval L_I = 1
C Eval L_Pos = 1
* looper tant qu'il y a des lettres a chercher (l'alphabet)
C Dow L_I <= 26
C Eval L_ZonLet = L_TzoLet(L_I)
C Eval L_ZonChi = %char(L_TzoChi(L_I))
* looper jusqu'a aucune occurence de lettre trouvee
C Dou %check(L_ZonLet: L_IbanApres) = 0
* prendre la position de la lettre car le replace de champs de longueur
* differentes impose de connaitre la position suivante de la lettre de dep
l.105 C Eval L_Pos = %scan(L_ZonLet : L_IbanApres)
l.106 C Eval L_IbanApres = %replace(L_ZonChi:L_IbanApres
C :L_Pos:L_Pos + 1)
C Enddo
C Eval L_I = L_I + 1
C Enddo
* Les zones du IBAN sont complétées avec des 0 à la place des blancs :
C Move L_IbanApres L_IbanAsNum
* Les valeurs du N° de IBAN doivent former un multiple de 97 :
C If L_IbanAsNum <> 0 And
C %Rem(L_IbanAsNum:97) = 1
C Eval P_Retour = 'OK'
C EndIf
C EVAL *inlr = *on