Expressions calculées ADONIX
Présentation
Dans un certain nombre d'écrans de paramétrage, on peut être amené à entrer des formules de calcul, encore appelées expressions adonix (le moteur d'exécution des progiciels en technologie X3 s'appelle en effet adonix). Ces expressions sont exprimées sous forme algébrique, et font partie d'un langage général. On trouvera ci-dessous une description générale des fonctions utilisables dans les expressions adonix.
De nombreuses aides existent lors de la saisie de formule, à la fois pour connaître les fonctions et les variables utilisables , mais aussi pour expliciter la signification de la formule. Ces aides sont accessibles par le biais de l'éditeur de formule.
Il est possible de tester une expression (dans laquelle ne figurent que des constantes et des variables accessibles dans le contexte) grâce à la calculette.
Type d'une expression ADONIX
Une expression adonix est de type alphanumérique, numérique, ou de type date. Selon l'endroit où est réalisé ce paramétrage, on peut avoir besoin de l'un ou l'autre de ces types (même si tous les types peuvent être utilisés dans une formule, des fonctions d'un type donné pouvant faire appel à des arguments d'un autre type). Il est à noter que la fonction type permet de tester le type d'une variable.
Comment bâtir une expression ADONIX
Une expression se compose de constantes, d'opérateurs, de variables, et de fonctions.
Constantes
Les constantes peuvent être :
de type alphanumérique : exprimées soit entre apostrophes ('), soit entre guillemets ("). Voici deux exemples de chaînes valides :
|
"C'est certain" |
|
'une "chaîne" particulière' |
de type numérique : exprimées avec un point décimal si nécessaire. Voici deux exemples de constantes numériques valides :
|
-2.5 |
|
123000 |
de type date : exprimées sous la forme [ jour / mois / année ]. Il est à noter que l'année doit obligatoirement être exprimée sur 4 chiffres. Voici deux exemples de constantes dates valides :
|
[15/3/2002] |
|
[21/05/1819] |
de type logique : elle se confond avec les constantes numériques : 1 (et par extension toute valeur non nulle) équivaut à Vrai, 0 équivaut à Faux.
Opérateurs
Les opérateurs valides sont les suivants :
|
+ |
addition de deux nombres, d'une date et d'un nombre de jours, ou concaténation de deux chaînes de caractères. |
|
- |
soustraction de deux nombres, d'une date et d'un nombre de jours, ou concaténation de deux chaînes de caractères en insérant un espace entre les deux chaînes. |
|
* |
multiplication de deux nombres |
|
/ |
division de deux nombres |
|
^ |
élévation à la puissance |
|
< <= > >= <> |
opérateurs de comparaison |
|
and or xor not |
opérateurs logiques, qui peuvent aussi s'abrévier & | ? ! |
On dispose par ailleurs de la possibilité d'utiliser des parenthèses avec un niveau d'imbrication illimité.
Variables
Une variable s'exprime de façon générale sous la forme :
| [ classe ] nomvar ( indice ) |
Par exemple, on peut définir les variables suivantes :
| [F:BPC]BPCNAME |
| MA_VARIABLE |
| ELEMENT(33) |
Le nom de la variable nomvar s'exprime sous la forme de lettres et/ou de chiffres, le premier caractère étant toujours une lettre et le caractère de soulignement étant également admis. La longueur significative d'un nom de variable est limitée à 12 caractères. Tous les noms sont autorisés, hormis certains mots-clés réservés au langage (File, Until, ou Commit font par exemple partie de ces mots-clés). Lorsqu'on tape un nom de variable en lettres minuscules, il est automatiquement transformé en lettre majuscules, sauf s'il s'agit d'un mot-clé.
Certaines variables peuvent être dimensionnées, c'est-à-dire correspondre à des tableaux d'éléments (de 1 à 4 dimensions sont possibles). Dans cas, on donne le ou les indices sous la forme d'expressions numériques, séparées par des virgules s'il y en a plusieurs, entre parenthèses (par exemple, M_TB(1,2,8) est une syntaxe valide).
Une classe correspond à un ensemble de variable liées à un contexte. Les classes les plus courantes sont les suivantes :
[V] : classe de variables globales. Une variable de ce type est liée à la session ADONIX. Une fois créée, elle reste accessible tant qu'elle n'a pas été détruite, ou tant que la session ADONIX ne s'arrête pas. Sa déclaration se fait à l'aide d'instructions dédiées (selon son type, on utilise les instructions Integer, Decimal, Char, Date, Libelle, Shortint, Float, Double).
[L] : classe de variables locales. Elle est liée à une imbrication de sous-programme (chaque instruction Call crée une nouvelle classe de variables locales qui cache la classe précédente). La déclaration de variables de ce type se fait de même que les variables précédentes, mais en faisant précéder la déclaration du mot-clé Local.
[C] : classe de variables de type compteur. Il s'agit de variables communes à tous les postes d'un dossier. Leur création se fait par une fonction de développement dédiée.
[F:abv] ou encore [abv] : il s'agit de la classe des variables liées à une table déclarée par l'instruction File. On y retrouve les valeurs de l'enregistrement courant.
[M:abv] ou encore [abv] : il s'agit de la classe des variables liées à un écran de saisie déclaré par l'instruction Mask. On y retrouve les valeurs ayant été saisies ou susceptibles d'être affichées (chaque onglet d'un écran est considéré comme un masque).
La classe n'est pas obligatoire, car des règles permettent de connaître la classe par défaut.
Il existe un ensemble de variables dites système, car gérées directement par adonix. Alors que les autres variables sont transformées, lors de la saisie, en majuscules, ces variables, qui font partie des mots-clés du langage, sont affichées en minuscules. Voici quelques variables système utilisables (liste non exhaustive) :
Nom | Type | Définition |
nomap | chaîne | nom du dossier courant |
datesyst | date | date système modifiable |
adxdir | chaîne | répertoire de base adonix |
nolign | numérique | numéro de ligne courante |
fstat | numérique | statut de retour après lecture ou écriture table |
Fonctions définies dans le moteur
Une fonction s'exprime sous la forme fonction(liste d'arguments). De très nombreuses fonctions existent : traitement de chaînes de caractères, calculs sur dates, fonctions numériques classiques, fonctions de troncature et d'arrondi, fonctions statistiques…
Une liste des principales fonctions utilisables dans ADONIX se trouve ci-dessous. Dans le tableau des fonctions, les conventions d'écriture sont les suivantes :
v est un argument de type quelconque (idem pour v1,v2,v3...)
c est un argument de type chaîne de caractères
x est un argument de type numérique
n, p, q... sont des arguments de type entier
V est une variable
liste est une liste de variables ou d'expressions. Dans ce type de liste, une variable TABLO de type tableau peut être utilisée sous la forme TABLO(I) (on ne prend qu'un indice), TABLO (on parcourt tous les indices), ou TABLO(I..J) (on parcourt les indices I à J inclus).
Syntaxes | Type | Définition |
date$ | date | date courante |
sin(x), cos(x), tan(x) | numérique | fonctions trigonométriques |
asin(x),acos(x)... | numérique | fonctions trigonométriques inverses |
log(x),exp(x),ln(x) | numérique | fonctions logarithmiques |
abs(x), sgn(x) | numérique | valeur absolue, signe |
ar2(x), arr(x,y) | numérique | arrondi à 2 décimales, arrondi de x à y près |
int(x), mod(x,y) | numérique | partie entière, modulo |
len(c) | numérique | longueur d'une chaîne |
day(d),month(d),year(d) | numérique | extraction quantième, mois, année d'une date |
dayn(d),week(d) | numérique | numéro du jour dans la semaine, no de la semaine |
num$(x) | chaîne | convertit un nombre en une chaîne (représentation décimale) |
space$(n), chr$(n) | chaîne | chaîne composée de n espaces, de 1 caractère de code interne n |
string$(n,c), string$(n,x) | chaîne | chaîne composée de n caractères c (ou n caractères de code x) |
day$(d), month$(d) | chaîne | nom du jour, nom du mois |
addmonth(d,n) | date | la date d auquel on a ajouté n mois |
eomonth(d) | date | le dernier jour du mois correspondant à la date d |
left$(c,n), right$(c,n) | chaîne | partie gauche/droite d'une chaîne sur n caractères |
mid$(c,n,p), seg$(c,n,p) | chaîne | extraction de sous-chaînes d'une chaîne donnée |
gdat$(n,p,q) | date | construction d'une date (n=jour,p=mois,q=année) |
pat(c1,c2) | numérique | vérifie la conformité d'une chaîne c1 à un modèle c2 (1 si conforme, 0 sinon). Le modèle peut inclure les méta-caractères * (nombre quelconque de caractères quelconques), ? (un caractère quelconque), # (un chiffre quelconque). |
min(liste), max(liste) | tous types | minimum ou maximum d'un ensemble de variables ou valeurs |
sum(liste), prd(liste) | numérique | somme, produit d'un ensemble de variables ou valeurs |
avg(liste), var(liste) | numérique | moyenne, variance d'un ensemble de variables ou valeurs |
sum(liste) | chaîne | concaténation d'un ensemble de variables ou valeurs chaînes |
uni(liste) | numérique | vérification d'unicité sur un ensemble de variables ou valeurs |
find(v,liste) | numérique | recherche d'une valeur de type quelconque dans une liste |
evalue(c) | tous types | evaluation d'une chaîne de caractère contenant une expression |
format$(c,v) | chaîne | formattage d'une valeur avec un format donné c. |
toupper(c),tolower(c) | chaîne | transformation en minuscules, en majuscules |
sigma(V=v1,v2,v3) | numérique | somme (V variant de v1 à v2), de l'expression v3 fonction de V. |
Fonctions définies par les développeurs
Il existe également des fonctions définies par des développeurs et utilisables dans les expressions calculées, par la syntaxe suivante :
func TRAIT.FONCT(liste d'arguments)
TRAIT étant le nom du traitement, et FONCT le nom de la fonction concernée. Il est à noter que les fonctions utilisables sont documentées dans la table des sous-programmes.