Espressioni calcolate ADONIX 

Presentazione

In un certo numero di videate di parametrizzazione, si può essere portati ad inserire delle formule di calcolo, ancora definite espressioni adonix (il motore di esecuzione dei software in tecnologia X3 si chiama effettivamente adonix). Queste espressioni sono espresse in forma algebrica e fanno parte di un linguaggio generale. Si troverà qui di seguito una descrizione generale delle funzioni utilizzabili nelle espressioni adonix.

Esistono vari help in fase di inserimento della formula, a volte per conoscere le funzioni e le variabili utilizzabili, ma anche per esplicitare il significato della formula. Questi help sono accessibili grazie all'editor di formula.

E' possibile testare un'espressione (in cui appaiono solo le costanti e le variabili accessibili nel contesto) grazie alla calcolatrice.

Tipo di un'espressione ADONIX

Un'espressione ADONIX è di tipo alfanumerico, numerico o di tipo data. A seconda dell'ambiente in cui è realizzata questa parametrizzazione, è possibile avere bisogno di uno o dell'altro tipo (anche se tutti i tipi possono essere utilizzati in una formula, poichè delle funzioni di un dato tipo possono far richiamo ad argomenti di un altro tipo). Bisogna notare che la funzione tipo permette di testare il tipo di una variabile.

Come costruire un'espressione ADONIX

Un'espressione si compone di costanti, di operatori, di variabili e di funzioni.

Costanti

Le costanti possono essere:

*    di tipo alfanumerico: espresse sia tra apici ('), sia tra doppi apici ("). Ecco due esempi di stringhe valide:

 

"E' sicuro"

 

'una "stringa" particolare'

*    di tipo numerico: espresse con un punto decimale se necessario. Ecco due esempi di costanti numeriche valide:

 

-2.5

 

123000

*    di tipo data: espresse sotto forma [ giorno / mese / anno ]. Si noti che l'anno deve essere obbligatoriamente espresso su 4 cifre. Ecco due esempi di costanti date valide:

 

[15/3/2002]

 

[21/05/1819]

*    di tipo logico: si confonde con le costanti numeriche: 1 (e per estensione ogni valore non nullo) equivale a Vero, 0 equivale a Falso.

Operatori

Gli operatori validi sono i seguenti:

 

+

addizione di due numeri, di una data e di un numero di giorni o concatenazione di due stringhe di caratteri.

 

-

sottrazione di due numeri, di una data e di un numero di giorni o concatenazione di due stringhe di caratteri inserendo uno spazio tra le due stringhe.

 

*

moltiplicazione di due numeri

 

/

divisione di due numeri

 

^

elevamento alla potenza

 

<

<=

>

>=

<>

operatori di confronto

 

 

and

or

xor

not

operatori logici, che possono anche essere abbreviati

&

|

?

!

Si dispone anche della possibilità di utilizzare delle parentesi senza alcun limite.

Variabili

Una variabile si esprime generalmente sotto la forma:

 

[ classe ] nomvar ( indice )

Per esempio, è possibile definire le seguenti variabili:

 

[F:BPC]BPCNAME

 

MIA_VARIABILE

 

ELEMENTO(33)

Il nome della variabile nomvar si esprime sotto forma di lettere e/o di cifre, dove il primo carattere è sempre una lettera e anche il carattere sottolineato viene ammesso. La lunghezza significativa di un nome di variabile è limitata a 12 caratteri. Tutti i nomi sono autorizzati, eccetto alcune keyword riservate al linguaggio (File, Until o Commit fanno per esempio parte di queste parole chiave). Quando si digita un nome di variabile in lettere minuscole, viene trasformato automaticamente in lettere maiuscole, salvo che non si tratti di una keyword.

Alcune variabili possono essere dimensionate, cioè corrispondere a dei riquadri di elementi (sono possibili da 1 a 4 dimensioni). In questo caso, va indicato il o gli indici sotto forma di espressioni numeriche, separate da delle virgole se sono tante, tra parentesi (per esempio M_TB(1,2,8) è una sintassi valida).

Una classe corrisponde ad un insieme di variabili legate ad un contesto. Le classi più correnti sono le seguenti:

*    [V] : classe di variabili globali. Una variabile di questo tipo è collegata alla sessione ADONIX. Una volta creata, rimane accessibile fino a quando non sarà distrutta o finchè lnon si chiuderà a sessione ADONIX. La sua dichiarazione si fa con l'aiuto di istruzioni dedicate (secondo il tipo, si utilizzano le istruzioni Integer, Decimal, Char, Date, Libelle, Shortint, Float, Double).

*    [L] : classe di variabili locali. E' collegata ad un ciclo di sotto programmi (ogni istruzione Call crea una nuova classe di variabili locali che nasconde la classe precedente). La dichiarazione di variabili di questo tipo si fa come per le variabili precedenti, ma facendo precedere la dichiarazione della keyword Local.

*    [C]: classe di variabili di tipo contatore. Si tratta di variabili comuni a tutte le postazioni di un dossier. La loro creazione si fa tramite una funzione di sviluppo dedicata.

*    [F:abb] o ancora [abb]: si tratta della classe delle variabili collegate ad una tabella dichiarata dall'istruzione File. Vi si trovano i valori del record corrente.

*    [M:abb] o ancora [abb]: si tratta della classe delle variabili collegate ad una videata di inserimento dichiarata dall'istruzione Mask. Vi si trovano i valori che sono stati inseriti o in grado di essere visualizzati (ogni folder di una videata è considerato come una maschera).

La classe non è obbligatoria, poichè le regole permettono di conoscere la classe di default.

Esistono un insieme di variabili dette sistema, in quanto gestite direttamente da adonix. Mentre le altre variabili sono trasformate, in fase di inserimento in maiuscolo, queste variabili, che fanno parte delle keyword del linguaggio, sono visualizzate in minuscolo. Ecco alcune variabili di sistema utilizzabili (lista non esauriente):

Nome

Tipo

Definizione

nomap

stringa

nome del dossier corrente

datesyst

data

data sistema modificabile

adxdir

stringa

directory di base adonix

nolign

numerico

numero di riga corrente

fstat

numerico

stato di ritorno dopo lettura o scrittura di una tabella

Funzioni definite nel motore

Una funzione si esprime sotto forma di funzione (lista di argomenti). Esistono numerose funzioni: elaborazione di stringhe di caratteri, calcoli su date, funzioni numeriche classiche, funzioni di troncatura e arrotondamento, funzioni statistiche…

Un elenco delle principali funzioni utilizzabili in ADONIX si trova qui in basso. Nel riquadro delle funzioni, le convenzioni di scrittura sono le seguenti:

*    v è un argomento di qualunque tipo (idem per v1,v2,v3...)

*    è un argomento di tipo stringa di caratteri

*    x è un argomento di tipo numerico

*    n, p, q... sono degli argomenti di tipo intero

*    V è una variabile

*    lista è un elenco di variabili o di espressioni. In questo tipo di lista, una variabile TABLO di tipo riquadro può essere utilizzata sotto la forma TABLO(I) (si considera solo un indice), TABLO (si percorrono tutti gli indici) o TABLO(I..J) (si percorrono gli indici da I a J inclusi).

Sintassi

Tipo

Definizione

date$

data

data corrente

sin(x), cos(x), tan(x)

numerico

funzioni trigonometriche

asin(x),acos(x)...

numerico

funzioni trigonometriche inverse

log(x),exp(x),ln(x)

numerico

funzioni logaritmiche

abs(x), sgn(x)

numerico

valore assoluto, segno

ar2(x), arr(x,y)

numerico

arrotondamento a 2 decimali, arrotondamento da x a y

int(x), mod(x,y)

numerico

parte intera, modulo

len(c)

numerico

lunghezza di una stringa

day(d),month(d),year(d)

numerico

estrazione giorno, mese, anno di una data

dayn(d),week(d)

numerico

numero del giorno nella settimana, numero della settimana

num$(x)

stringa

converte un numero in una stringa (rappresentazione decimale)

space$(n), chr$(n)

stringa

stringa composta da n spazi, da 1 carattere di codice interno n

string$(n,c), string$(n,x)

stringa

stringa composta da n caratteri c

(o n carattere di codice x)

day$(d), month$(d)

stringa

nome del giorno, nome del mese

addmonth(d,n)

data

la data d a cui si è aggiunto n mesi

eomonth(d)

data

l'ultimo giorno del mese corrispondente alla data d

left$(c,n), right$(c,n)

stringa

parte sinistra/destra di una stringa su n caratteri

mid$(c,n,p), seg$(c,n,p)

stringa

estrazione di sub-stringhe di una determinata stringa

gdat$(n,p,q)

data

costruzione di una data (n=giorno, p=mese, q=anno)

pat(c1,c2)

numerico

verifica la conformità di una stringa c1 ad un modello c2 (1 se conforme, altrimenti 0). Il modello può includere i meta-caratteri * (numero qualsiasi di caratteri qualsiasi), ? (un carattere qualsiasi), # (una cifra qualsiasi).

min(lista), max(lista)

tutti i tipi

minimo o massimo di un insieme di variabili o valori

sum(lista), prd(lista)

numerico

somma, prodotto di un insieme di variabili o valori

avg(lista), var(lista)

numerico

media, varianza di un insieme di variabili o valori

sum(lista)

stringa

concatenazione di un insieme di variabili o valori stringa

uni(lista)

numerico

verifica di unicità su un insieme di variabili o valori

find(v,lista)

numerico

ricerca di un valore di tipo qualunque in una lista

evalue(c)

tutti i tipi

valutazione di una stringa di carattere contenente un'espressione

format$(c,v)

stringa

formattazione di un valore con un determinato formato c.

toupper(c),tolower(c)

stringa

trasformazione in minuscolo, in maiuscolo

sigma(V=v1,v2,v3)

numerico

somma (V varia da v1 a v2), dell’espressione v3 funzione di V.

Funzioni definite dagli sviluppatori

Esistono anche delle funzioni definite da sviluppatori e utilizzabili nelle espressioni calcolate, tramite la seguente sintassi:

func PROGR.FUNZ(lista di argomenti)

PROGR è il nome del programma, e FUNZ il nome della funzione interessata. Si noti che le funzioni utilizzabili sono documentate nella tabella dei sotto-programmi.