Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : ARexx - itératives, tableaux, chaînes
(Article écrit par Xavier Leclercq et extrait d'Amiga News - novembre 1992)
|
|
Dans la première partie nous
avons parlé du lancement d'ARexx, des commentaires, des variables, des opérateurs, des verbes
d'entrées/sorties et des alternatives.
Entrons dès lors dans le vif du sujet sans préambule pour aborder le point suivant.
Les itératives
Mais d'abord, que signifie le mot "itérative" ? Strictement parlant,
il s'agit d'une alternative masquée...
Un langage de programmation à la base n'a donc pas besoin d'itératives. L'important est de posséder
une structure alternative et un moyen de branchement seulement. Algorithmiquement parlant, une manière
correcte de représenter l'itérative est :
Ce qui signifie que la partie algorithmique comprise entre les mots "répéter" et "jusqu'à ce que"
doit être répétée tant que la condition spécifiée après le "jusqu'à ce que" ne soit pas vraie.
ARexx reconnaît une série de commandes pour piloter ses itératives. La règle générale est que
toute itérative est incluse entre les mots DO ... END.
Le "DO FOR x" est efficace à condition de connaître à l'avance le nombre d'itérations qu'il faudra effectuer.
Le "DO FOREVER" boucle indéfiniment. Pour interrompre ce cycle infernal nous devrons utiliser "BREAK".
Le verbe ARexx "BREAK" permet d'introduire ce que l'on nomme la rupture de séquence et permet de quitter
la boucle pour continuer à la première ligne qui suit le "END" de la boucle (on peut utiliser également
l'instruction "LEAVE" à cet usage).
Pour éviter l'initialisation de départ "I = 1" on peut employer la structure itérative suivante :
L'incrémentation de "I" est de plus automatique. Plus besoin de la séquence "I = I + 1".
Cette forme "DO UNTIL condition" est assez proche de la forme algorithmique classique vue plus haut :
Cette forme est un peu le contraire de la précédente : "faire tant que la condition se réalise".
"ITERATE" a pour fonction de passer directement à l'itération suivante. Dans ce cas très spécial
SAY "On m'oublie" ne connaîtra jamais la joie de s'afficher à l'écran.
Les tableaux
ARexx ne gère pas les tableaux comme la plupart des langages. Un tableau est déclaré comme suit :
Nom du tableau + un point + ordre dans le tableau permet l'accès à un élément. Les tableaux
peuvent être à plusieurs dimensions :
Les fonctions de conversion
Elles sont au nombre de six et permettent une conversion :
- D'une base binaire vers un caractère : B2C.
- D'un caractère vers une base binaire : C2B.
- D'un caractère vers une base décimale : C2D.
- D'une base décimale vers un caractère : D2C.
- D'un caractère vers une base hexadécimale : C2X.
- D'une base hexadécimale vers un caractère : X2C.
Manipulations de chaînes
Voici les fonctions qui manipulent des chaînes et des mots :
- REVERSE(CHAINE) : inverse l'ordre des lettres dans la phrase.
- RIGHT(CHAINE,LONGUEUR) : extraire une portion à droite de la chaîne.
- LEFT(CHAINE,LONGUEUR) : extraire une portion à gauche de la chaîne.
- LASTPOS(SOUS-CHAINE,CHAINE) : recherche la dernière position de la sous-chaîne enfermée dans la chaîne.
- INDEX(CHAINE,SOUS_CHAINE) : recherche la première position de la sous-chaîne enfermée dans la chaîne.
- COMPARE(CHAINE1,CHAINE2) : retournera une valeur qui correspond à la position du premier caractère qui diffère.
- WORD(CHAINE,N) : extraire le énième mot de la chaîne.
- WORDINDEX(CHAINE,N) : informe de la position du énième mot de la chaîne.
- WORDLENGTH(CHAINE,N) : retourne la longueur du énième mot de la chaîne.
- WORDS(CHAINE) : compte le nombre de mots de la chaîne.
Fonctions numériques
Peu nombreuses, mais encore assez courante dans d'autres langages, donc indispensables :
- ABS(NBRE) : retourne la valeur absolue du nombre.
- MAX(N1,N2,N3,...) : renseigne sur le plus grand des nombres.
- MIN(N1,N2,N3,...) : renseigne sur le plus petit des nombres.
- SIGN(NBRE) : retourne "1" si le nombre est positif, et "-1" si le nombre est négatif.
L'instruction "SIGNAL"
Elle permet un branchement automatique à un label spécifié dès qu'un événement spécial se
produit.
- SIGNAL ON BREAK_X : X représente une des quatre touches de "Ctrl"
qui sont maîtrisables via ARexx : Ctrl-C, Ctrl-D, Ctrl-E, Ctrl-F (X = C OU D OU E OU F).
Il s'agit d'une redirection du compteur de programme. Si en cours d'exécution vous appuyez
sur "Ctrl_C" et que "SIGNAL ON BREAK_C" existe, le programme se branchera automatiquement au
label "BREAK_C".
Certains langages (BASIC) possèdent l'instruction "ON ERROR GOTO", ARexx a dans son bagage
quelque chose de similaire : "SIGNAL ON SYNTAX".
Si maintenant vous vient à la tête de manipuler une variable non encore définie, ARexx vous préviendra :
Instructions diverses
- EXIT n : sort du programme en transmettant au CLI/Shell la valeur "n" (Si N = 0 pas d'erreur).
- INTERPRET(X) : commande très puissante puisqu'elle permet d'interpréter une variable !
Vous pouvez ainsi paramétrer un fichier qui une fois lu pourra être "traduit" en ARexx par "INTERPRET".
- TIME() : affiche l'heure courante.
- SETCLIP(CLIP,VALEURS) : si vous avez connu l'époque du Commodore 128 vous allez comprendre
sans difficulté cette notion. Il s'agit de banques de données qui sont visibles par tous les programmes ARexx.
"CLIP" est un nom, "VALEUR" est une suite de données.
- GETCLIP(CLIP) : recherche les données stockées.
- PRAGMA('DIRECTORY ') : retourne le répertoire courant.
Exemple récapitulatif
Il existe encore quelques instructions que nous étudierons plus tard, mais en gros vous
connaissez déjà l'ABC du langage. Si vous prenez un listing source publié
dans cet article,
vous allez donc vous étonner de ne pas tout comprendre. Ceci est tout à fait normal.
En effet, Cédric Beust ouvrait dès le départ une bibliothèque spéciale qui elle-même contient
des fonctions spécifiques qui ne sont pas des instructions ARexx... Nous étudierons cela
ensemble la prochaine fois.
Exemple : gérez vos disquettes Fish
Le programme suivant crée le catalogue de vos AmigaLibDisks. Vous introduisez vos Fred Fishs une
à une dans n'importe quel ordre. Le programme ARexx se chargera de les trier et de créer un
catalogue commun (par ordre croissant). Vous devrez spécifier le chemin + nom_du_fichier_catalogue à la fin
de l'introduction de vos FF. Bon coding !
Notes :
- D2C(10) -> produit un retour de chariot.
- D2C(9) -> une tabulation.
- D2C(12) -> un "Form Feed" qui efface l'écran.
|