Expressões calculadas ADONIX 

Apresentação

Num certo número de ecrãs de parametrização, pode ser levado a entrar nas fórmulas de cálculo, ainda chamados expressões adonix (o motor de execução dos softwares em tecnologia X3 se chama com efeito adonix). Estas expressões são exprimidas sob a forma algébrica, e fazem parte de uma linguagem geral. Encontrar-se-á em cima uma descrição geral das funções utilizáveis nas expresssões adonix.

Numerosas ajudas existem no momento do registo da fórmula, à vez para conhecer as funções e as variáveis utilizáveis, mas para especificar o significado da fórmula. Estas ajudas são acessíveis através do editor de fórmula

É possível de testar uma expressão (na qual não figuram que constantes e de variáveis acessíveis no contexto) graças à calculadora.

Tipo de uma expressão SAGE

Uma expressão sage é de tipo alfanumérica, numérica, ou de tipo data. Segundo o lugar onde é realizada esta parametrização, pode se ter necessidade de um ou outro destes tipos (mesmo se todos os tipos podem ser utilizados numa fórmula, funções de um tipo de dados podendo fazer apelo aos argumentos de outro tipo). De referir que a função tipo permite testar o tipo de uma variável.

Como construir um expressão SAGE

Uma expressão se compõe de constantes, operadores, de variáveis, e de funções.

Constantes

As constantes podem ser:

*    de tipo alfanumérico : exprimidas seja entre apóstrofos (*), seja entre aspas (") Eis dois exemplos de cadeias válidas :

 

"É o certo"

 

'uma "cadeia" particular'

*    de tipo numérico: exprimidos com um ponto decimal se necessário. Eis dois exemplos de constantes numéricas válidas :

 

-2.5

 

123000

*    de tipo data : exprimidos sob a forma [ dia/ mês / ano] Deve-se referir que o ano deve obrigatoriamento ser exprimido sobre 4 cifras. Eis dois exemplos de constantes datas válidas :

 

[15/3/2002]

 

[21/05/1819]

*    de tipo lógico : ela se confunde com as constantes numéricas : 1 ( e por extensão todo o valor não nulo) equivale a verdadeiro, 0 equivale a Falso .

Operadores

Os operadores válidos são os seguintes :

 

+

Adição de dois números, de uma data e de um número de dias, ou concatenação das duas cadeias de caracteres.

 

-

subtração de dois números, de uma data e de um número de dias, ou concatenação das duas cadeias de caracteres em inserindo um espaço entre as das cadeias.

 

*

multiplicação de dois números.

 

/

divisão de dois números

 

^

elevação à potência

 

<

<=

>

>=

<>

operadores de comparação

 

 

e :

ou

xor

not

operadores lógicos, que podem também se abreviar.

&

|

?

!

Dispõe-se por outro lado da possibilidade de utilizar os parênteses com um nível de imbricação ilimitada.

Variáveis

Uma variável se exprime de maneira geral sob a forma:

 

[ classe ] nomvar ( indice )

Por exemplo, pode-se definir as variáveis seguintes:

 

[F:BPC]BPCNAME

 

MA_VARIABLE

 

ELEMENT(33)

O nome da variável nomvar se exprime sob a forma de letras e/ou de escolhas, o primeiro caracter sendo sempre uma letra e o caracter de sublinhado sendo igualmente admitidos. O comprimento significativo de um nome de variável é limitado a 12 caracteres. Todos os nomes são autorizados, entre certas palavras-chave reservadas à linguagem (File, Until, ou Commit fazem parte destas palavras-chaves) Quando se tecla um nome de variável em letras minúsculas, é automaticamente transformada em letras maiúsculas, salvo se se trata de uma expressão-chave.

Certas variáveis podem ser dimensionadas, quer dizer corresponder a quadros de elementos (de 1 a 4 dimensões são possíveis) No caso, damos o ou os índices sob a forma de expressões numéricas, separados por vírgulas se existirem vários, entre parênteses (por exemplo, M_TB(1,2,8) é uma sintaxe válida).

Uma classe corresponde a um conjunto de variáveis ligadas a um contexto. As classes mais correntes são as seguintes:

*    [V] : classe de variáveis globais. Uma variável deste tipo está relacionada à sessão SAGE. Uma vez criada, ela resta acessível tanto que ela não foi destruida, ou tanto que a sessão SAGE não parou. A sua declaração se faz na ajuda de instruções dedicadas (segundo o tipo, utilizamos as instruções Integer, Decimal, Char, Date, Libelle, Shortint, Float, Double).

*    [L] : classe de variáveis locais. Ela está ligada a uma imbricação de sub-programa (cada instrução Call cria uma nova classe de variáveis locais que escondem a classe precedente). A declaração de variáveis deste tipo se faz de mesmo que as variáveis precedentes, mas em fazendo preceder a declaração de uma expressão-chave Local.

*    [C] : classe de variáveis de tipo contador. Trata-se de variáveis comuns a todos os postos de um dossier. A sua criação faz.-se por uma função de desenvolvimento dedicado.

*    [F:abv] ou ainda [abv] : trata-se da classe das variáveis relacionadas a uma tabela declarada pela instrução File. Encontramos os valores de registo corrente.

*    [M:abv] ou ainda [abv] : trata-se da classe das variáveis relacionadas a um ecrã declarado pela instrução Mask. Encontramos os valores tendo sido registados ou susceptíveis de ser afixados (cada separador de um ecrã considerado como uma máscara).

A classe não é obrigatória, porque as regras permitem de conhecer a classe por defeito.

Existe um conjunto de variáveis ditos sistema, porque gerados directamente por sage. Então que as outras variáveis são transformadas, no momento do registo, em maiúsculas, estas variáveis, que fazem parte de expressões-chave da linguagem, são afixadas em minúsculas. Eis quaisquer variáveis ssitema utilizáveis (lista não exaustiva) :

Nome

Tipo

Definição

nomap

cadeia

nome do dossier corrente

datasyst

data$

data sistema modificável

adxdir

cadeia

directório de base sage

nolign

numérico

número de linha corrente

fstat

numérico

status de retorno após leitura ou registo tabela

Funções definidos no motor

Uma função se exprime sob a forma função (lista de argumentos). Numerosas funções existem: tratamento de cadeias de caracteres, cálculos sobre datas, funções numéricas clássicas, funções de troncadura e de arredondamento estatísticas...

Uma lista das principais funções utilizáveis em SAGE se encontra acima. No quadro das funções, as convensões de registo são os seguintes :

*v é um argumento de tipo qualquer (idem para v1, v2, v3...)

*    c é um argumento de tipo cadeia de caracteres

*    x é um argumento de tipo numérico

*n, p, q...são de argumentos de tipo inteiro

*    V é uma variável

*    lista é uma lista de variáveis ou de expressões. Neste tipo de lista, uma variável TABLO de tipo quadro pode ser utilizado sob a forma TABLO(I) (não se toma que um índice), TABLO (percorrem-se todos os índices), ou TABLO(I..J) (percorre-se os índices I a J incluindo).

Sintaxes

Tipo

Definição

data$

data$

data corrente

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

numérico

funções trigonometricas

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

numérico

funções trigonométricas inversas

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

numérico

funções logaritmicas

abs(x), sgn(x)

numérico

valor absoluto, sinal

ar2(x), arr(x,y)

numérico

arredondado a 2 decimais, arredondados de x a y perto

int(x), mod(x,y)

numérico

parte inteira, módulo

len(c)

numérico

Comprimento de uma cadeia

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

numérico

extracção quantia, mês, ano de uma data

dayn(d),week(d)

numérico

número de dias na semana, nº da semana

num$(x)

cadeia

converte um número em cadeia (representação decimal)

space$(n), chr$(n)

cadeia

cadeia composta de n espaços, de 1 caracter de código interno n

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

cadeia

cadeia composta de n caracteres c

(ou n caracteres de código x)

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

cadeia

nome do dia, nome do mês

addmonth(d,n)

data$

a data d à qual se acrescenta n meses

eomonth(d)

data$

O último dia do mês correspondente à data d

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

cadeia

parte esquerda/direita de uma cadeia sobre n caracteres

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

cadeia

Extração de sub-cadeias de uma cadeia dada

gdat$(n,p,q)

data$

Construção de uma data (n=dias,p=mês,q=ano)

pat(c1,c2)

numérico

O modelo pode incluir os meta-caracteres * (número qualquer de caracteres quaisquer), ? (um caracter qualquer), # (uma cifra qualquer).

min(liste), max(liste)

Todos os tipos

mínimo ou máximo de um conjunto de variáveis ou valores

sum(lista), prd(lista)

numérico

soma, produto de um conjunto de variáveis ou valores.

avg(lista), var(lista)

numérico

média, variância de um conjunto de variáveis ou valores.

sum(lista)

cadeia

concatenação de um conjunto de variáveis ou valores cadeias.

uni(lista)

numérico

verificação de unicidade sobre um conjunto de variáveis ou valores.

find(v,lista)

numérico

pesquisa de um valor de tipo qualquer numa lista

evalue(c)

Todos os tipos

avaliação de uma cedeia de caracter contendo uma expressão

format$(c,v)

cadeia

Formatação de um valor com um formato dado c.

toupper(c),tolower(c)

cadeia

transformação em minúsculas, em maiúsculas

sigma(V=v1,v2,v3)

numérico

soma (V variante de v1 a v2), da expressão v3 função de V.

Funções definidos pelos programadores

Existe igualmente as funções definidas por programadores e utilizáveis nas expressões calculadas, pela sintaxe seguinte:

func TRAIT.FONCT(lista de argumentos)

Rasto sendo o nome do tratamento, e FONCT o nome da função afectada. Deve-se referir que as funções utilizáveis são documentadas na tabela dos sub-programas.