Vous savez maintenant écrire des règles qui peuvent repérer n'importe quelle structure dans les données en entrée. Il nous reste à voir comment traiter deux conditions, indépendantes du contenu des données:
Le patron de fouille *< se vérifie au début des données en entrée.
Le patron de fouille *> se vérifie à la fin des données en entrée.
La transformation Accentuer peut alors produire une séquence de caractères pour initialiser l'imprimante en mode haute qualité d'impression. Elle pourra aussi produire à la fin de l'impression la séquence de caractères pour remettre l'imprimante en mode qualité normale:
(1)/Accentuer :
(2)*< = $1B $3A.; Passer en mode haute qualité
(3)>* = $1B $36.; Revenir en mode qualité normale
(4)$82 = France '{' USA.; é
et ainsi de suite pour tous les accents ...
La ligne (2) indique qu'au début des données en entrée, la séquence de caractères $1B $3A devra être produite en sortie : l'imprimante FACIT 4512 passe donc en mode d'impression de haute qualité.
La ligne (3) indique qu'à la fin des données en entrée, la séquence de caractères $1B 36 devra être produite en sortie : l'imprimante repasse donc en mode normal.
De toute évidence, le symbole *< ne peut se trouver que comme premier patron d'une règle: 'x', *< ne se vérifie jamais puisqu'aucune donnée ne peut se trouver avant le début des données !
De même le symbole >* ne peut se trouver que comme dernier patron d' une règle : >*, 'x' ne se vérifie jamais puisqu'aucune donnée ne peut se trouver après la fin des données !
*<, >* se vérifie pour un fichier de données vide.
^M^J, >* se vérifie pour la dernière fin de ligne des données. Dans un fichier texte, la dernière ligne est toujours terminée par ^M^J .
La négation ( 0 ou ~ ) peut précéder ces symboles:
0 *<, "Bonjour" se vérifie lorsque Bonjour apparait dans les données en entrée, mais pas au début.
^M^J, 0 >* se vérifie à la fin d'une ligne, mais pas pour la dernière.
Le seul facteur de répétition qui puisse être utile devant ces symboles est ~1 >* , pour indiquer "éventuellement à la fin".
Jusqu'à présent, les patrons de fouille que nous avons utilisés spécifient caractère par caractère les structures à retrouver dans les données en entrée.
Par exemple, dans la transformation International, pour vérifier si le numéro du mois est entre '01' et '12', nous pourrions écrire comme patron de fouille:
MOIS ('0', '1':'9') | ('1', '0':'2')
La structure du numéro de mois vient d'être définie caractère par caractère. Ce serait beaucoup plus pratique de vérifier directement si le numéro du mois est compris entre les chaînes de caractères '01' et '12' : c'est ce que permettent les conditions.
Des conditions peuvent être ajoutées à la fin de n'importe quelle section des patrons de fouille.
Chaque conditions se compose d'un opérateur de comparaison suivi d'un constructeur produisant la chaîne de caractère avec laquelle se fait la comparaison.
Les symboles des opérateurs de comparaison disponibles sont:
Comparaison Minuscules, majuscules et exacte accents confondus Egal == === Différent <> >< Inférieur < << Inférieur ou égal <= <<= Supérieur > >> Supérieur ou égal >= >>=
Notre exemple peut donc s'écrire maintenant:
MOIS 2 d >= '01' <= '12'
On peut aussi facilement retenir les mots compris dans un intervalle spécifique:
1~ "a":"z" >>= 'crocodile' <<= 'éléphant'
Ce patron se vérifiera aussi bien pour DAUPHIN que pour écureuil ou crocodiles mais ne se vérifiera ni pour croco ni pour éléphante.
Remarquez que la longueur des chaînes de caractères comparées n'a pas d' importance : seul leur rang dans un classement alphabétique importe.
Les conditions s'appliquent:
- soit sur les données en entrée pour lesquelles un patron de fouille vient de se vérifier:
patron-de-fouille conditions
- soit sur le contenu d'une variable quelconque
nom de variable conditions
- soit sur la valeur à assigner à une variable (tel que nous le verrons aux chapîtres
ASSIGNATION A UNE VARIABLE
etASSIGNATION CONDITIONNELLE)
Dans le cas de conditions sur un patron de fouille précédé par une variable, les données en entrée correspondantes seront stockées dans cette variable seulement si toutes les comparaisons réussissent.
Ainsi, MOIS 2 d >= '01' <= '12' permet de ne stocker le numéro du mois dans la variable MOIS que s'il est bien compris entre '01' et '12'.
D'autre part, une autre règle pourra s'assurer que la dernière date rencontrée n'est pas dans la période estivale en vérifiant MOIS < '06' > '08' dans ses patrons de fouille.