Accessibles en 7.3 TR6
Nouveau mot-clé dans les Data Structures: SAMEPOS
Permet d'indiquer qu'une sous-zone démarre à la même position qu'une autre
![]()
Même si elle est de longueur supérieure ce qui n'était pas possible avec OVERLAY
![]()
On peut donc aussi utiliser ce mot clé pour recouvrir des sous-zones par un tableau, ce qui permet d'éviter le CTDATA qui pose problème dans les programmes de service
.Nouveautés disponibles seulement en 7.4
Tableaux dynamiques
2 possibilités pour les déclarer DIM(*AUTO:nbmax) ou DIM(*VAR:nbmax)
DIM(*AUTO:nbmax)
nbmax postes au maximum (ici 500)
La dimension du tableau s'incrémente au fur et à mesure des affectations par nom-tableau(*NEXT)
Il est possible de définir explicitement le nombre de postes avec la BIF %elem(nombre de postes)
DIM(*VAR:nbmax)
nbmax postes au maximum (ici 500)
La dimension doit être définie explicitement par la BIF %elem(nombre de postes) pour pouvoir affecter des valeurs dans les postes
La fonction %ELEM admet un deuxième paramètre ce qui permet
lorsque %elem est la source , de retrouver :
-le nombre d'occurences d'un tableau
Nblignes = %elem(montableau)
-le nombre de postes actuellement alloués d'un tableau dynamique
Nbpostes = %elem(montableau:*ALLOC)
-la dimension maximale d'un tableau dynamique
NbpostesMax = %elem(montableau:*MAX)
Lorsque %elem est la cible de l'affectation, de renseigner:
-la dimension d'un tableau
%elem(montableau) = Nblignes
-l'allocation des postes
%elem(montableau:*ALLOC) = Nbpostes
-la dimension pour laquelle on conserve ce qui est déjà renseigné lors d'un rétrécissement puis agrandissement
%elem(montableau:*KEEP) = Nbpostesdont le contenu est conservé
Tableaux chargés à la compilation
Il est maintenant possible de déclarer des tableaux chargés à la compilation sans indiquer le nombre de postes
DIM(*CTDATA)
Seul un poste par enregistrement est possible PERRCD(1)
dcl-pr calechdate date; inDate date CONST; nbjour packed(3:0) CONST; End-Pr; dcl-pr calechnum8 date; inDate packed(8:0) CONST; nbjour packed(3:0) CONST; End-Pr; Dcl-pr calecheance date OVERLOAD(calechdate : calechnum8); |
Permettent les conversions en majuscule et minuscule simplement, plus besoin de passer par SQL embarqué ou encore %xlate !
Syntaxe :
%LOWER(string {: start { : length } })
%UPPER(string {: start { : length } })
String peut être de type CHAR ou de type UCS-2
Start représente la position de début à convertir (comme %substr).
Attention, la valeur est en octet et non en caractères (en fonction de l’encodage, comme UTF-8, à vous de vérifier que la longueur correspond au nombre de caractères souhaités).
Length représente la longueur, toujours en octets à convertir.
L’ensemble du string est retourné, mais seuls les caractères entre start et start+length sont convertis.Remarque : vous pouvez demander au compilateur d’expliciter les conversions de CCSID avec CTL-OPT CCSIDCVT(*LIST)
Permet de découper une chaîne de caractères dans tableau.
%SPLIT renvoie un tableau temporaire.
Elle n’est pas utilisable avec : SORTA, %ELEM, %LOOKUP et %SUBARR.
Syntaxe :
%SPLIT(string {: separators })
String peut être de type CHAR, GRAPHIC ou UCS-2.
Le second paramètre indique une liste de séparateurs possible. Son CCSID doit être identique à celui de string. La valeur par défaut est un caractère blanc.
%SPLIT peut s’utiliser avec l’itérateur FOR-EACH
Par exemple, découpage d'un fichier CSV (on a aussi des solutions avec SQL), ou pour des formats d'échanges avec des structures/séparateurs spécifiques.
Pour les opérations BD avec clés (%KDS ou liste de clés), interdit les arguments qui pourraient déborder ou être tronqués.
Lorsque EXPROPTS(*STRICTKEYS) n'est pas indiqué : les valeurs de recherche peuvent être de longueur différentes que la zone clé, avec des CCSID différents ... Avec EXPROPTS(*STRICTKEYS), le compilateur provoque une erreur de compilation si les critères de recherche ne sont pas dans les mêmes définitions.
Pour les zones :
Retourne l'index de la plus grande ou plus petite valeur dans un tableau. Comme toute les BIFs peut s'utiliser dans une expression.
Peut s'utiliser sur un tableau de type simple ou un tableau de DS. Dans ce cas, indiquer la zone de recherche.
Avec un la fonction intégrées %fields qui fonctionne maintenant avec SORTA.
Remarque : l'assistance à la saisie avec RDi (Ctl Espace) ne fonctionne pas avec %fields dans ce cas.
Nécessite la PTF compilateur ET débogage.
Comportement :