ASSIGNATIONS CONDITIONNELLES

L'exemple suivant permet de résoudre un problème fréquent : disposer un texte sur quatre-vingt colonnes, sans couper de mots entre deux lignes.

(1)/Disposer_sur_80_colonnes :
(2)^Z = ^Z.
(3)Lg_LIGNE := 0,
(4)LIGNE 0~ ( BLANCS 0~ ' ',
(5) MOT 1~ ( 0 ' ', 0 fdl, c ),
(6) Lg_LIGNE:= [Lg_LIGNE + %BLANCS+ %MOT] <= 80 ),
(7)0~ ' ', ~1 fdl
(8)= LIGNE, ^M^J.
(9)/fdl = ^M^J
(10)/c = $00:$FF

La première règle de Disposer_sur_80_colonnes (ligne (2) : ^Z = ^Z. ) copie tel quel dans le fichier de sortie le caractère "fin de texte" ( ^Z ) de MS-DOS : N'oubliez pas que ADAPT traite tous les caractères présents dans le fichier d'entrée. Sous MS-DOS, lorsque vous transformez un fichier texte en un fichier binaire, une première règle ^Z !. est souvent nécessaire dans votre transformation principale : le caractère "fin de texte" n'est alors pas copié dans le fichier de sortie. Cette situation ne se présente normalement pas avec les autres systèmes d'exploitation.

La seconde règle de Disposer_sur_80_colonnes (lignes (3) à (8)) permet de disposer correctement toute ligne à l'intérieur de 80 colonnes. La fin de ces lignes (parfois très longues) ( ^M^J ) indique une fin de paragraphe.

Lg_LIGNE sert de compteur mesurant la longueur de la ligne en cours de production : cette variable est donc initialisée à zéro (ligne (3)), puis débute l'extraction mot après mot d'une ligne de moins de 80 colonnes (lignes 4 à 8).

Une ligne est composée de 0 ou plus "segments". Chacun de ces "segments" est défini comme une suite de 0 ou plus espaces (stockés dans la variable BLANCS, ligne (4)), suivi d'un MOT de 1 ou plus caractères autres qu'un espace ou une fin de ligne (ligne (5)).

Une assignation conditionnelle à Lg_LIGNE suit à la ligne (6).


Des conditions peuvent suivre l'assignation à une variable des caractères produits par un constructeur:

variable := constructeur conditions

La chaîne de caractères produite par le constructeur ne sera stockée dans la variable que si toutes les conditions se vérifient.



Des conditions peuvent suivre l'assignation d'une valeur numérique à une variable:

variable := nombre conditions

La valeur numérique calculée ne sera stockée dans la variable que si toutes les conditions se vérifient.


Pour plus de clarté, il n'est pas permis de poser des conditions comparant des valeurs numériques avec une chaîne de caractères.

Revenons à notre exemple. Dans l'assignation conditionnelle :

Lg_LIGNE := [Lg_LIGNE + %BLANCS + %MOT] <= 80

on additionne d'abord la longueur de la ligne déjà accumulée + le nombre d' espaces avant le mot + la longueur du mot : cette addition fournit la longueur qu'aurait la ligne si les espaces et le mot qui viennent d'être rencontrés y sont ajoutés.

Si ce résultat est inférieur ou égal à 80, il est stocké dans la variable Lg_LIGNE. Sinon, le sous-patron échoue : la variable LIGNE reçoit alors tous les "segments" rencontrés jusqu'au dernier pour lequel la longueur de la ligne était inférieure à 80. LIGNE contient donc la ligne désirée, et la variable Lg_LIGNE contient sa longueur.

0~ ' ', ~1 fdl (ligne (7)) permet de supprimer les espaces superflus entre les lignes de même que les fins de ligne éventuelles. Il ne suffit plus que de produire la ligne en sortie suivie d'une fin de ligne (ligne (8)).

NOMBRES RÉELS

ADAPT ne permet pas encore toutes les opérations sur les nombres réels. Il possède cependant un opérateur d'encodage qui fabrique la représentation interne (binaire) d'un nombre réel à partir de sa représentation en caractères.

^."12.34"retourne la représentation interne, propre à votre ordinateur, du nombre réel 12.34.

^."123.4E-1"retourne la représentation interne de 123.4 x 10-1, c' est à dire 12.34 aussi.

L'opérateur ^. constructeur est surtout utilisé dans les conversions vers des progiciels (par exemple LOTUS 1-2-3).