Utilisation des triggers avancés

Cette section fournit des informations sur la façon d'utiliser les déclencheurs avancés pour extraire des noms de programmes dans DNC-Max. L'extraction de commentaires dans NC-Base se fait de la même manière.

Cette section renferme des informations dédiées aux utilisateurs spécialisés. Sautez la section si l'utilisation ou la compréhension des triggers avancé ne vous est pas nécessaire.

La notion de triggers avancés dans NC-Base est une version modifiée des Expressions régulières. Les expressions régulières sont une puissante méthode de recherche de chaînes de caractères dans un texte.

L'exemple ci-dessous montre comment utiliser les triggers avancés. À supposer que vous ayez un programme CN ISO portant des numéros de format N2010 au début de chaque ligne, et que le post-processeur utilisé pour générer le fichier ait inséré des lignes de commentaire au début du fichier sans numéros de bloc. Pour éviter que ces lignes soient émises vers la commande numérique, vous devez définir le trigger de départ suivant:

Ce déclencheur comprend les éléments suivants:

ˆLe trigger doit être trouvé au début d'une ligne
NChercher le caractère N
[0-9]Tout caractère compris entre 0 et 9
{1,4}Correspondre à 1-4 des caractères précédents, ici tout caractère dans la gamme de 0 à 9

Interprétation: Commencer le transfert à partir de la première ligne renfermant un N suivi de 1 à 4 chiffres en début de ligne.

Un exemple plus avancé est disponible à la fin de cette section.

Liste des symboles reconnus par les triggers avancés

.Correspondance avec tout caractère unique
*0 ou plusieurs correspondances de l'expression précédente
+1 ou plusieurs correspondances de l'expression précédente
-Plage
ˆExclusion de la classe (à l'intérieur des séparateurs de classes [])
{Début de l'intervalle
}Fin de l'intervalle
[Début de la classe de caractères
]Fin de la classe de caractères
?L'expression précédente est facultative
|Expression précédente OU expression suivante
ˆAncre de début de ligne
$Ancre de fin de ligne
(Début de la sous-expression
)Fin de la sous-expression
<Début de l'extraction
>Fin de l'extraction

Pour utiliser un symbole spécial comme élément du texte à trouver, précédez-le d'une barre oblique inverse '\'.

Exemple: Pour avoir '\' au début d'une ligne, indiquez ˆ\\

Classes de caractères (Limites)

Les classes de caractères sont représentées par les symboles '\[' et '\]'.

Exemple: [abc] trouve l'occurrence d'un des caractères 'a','b' ou 'c'.

Vous pouvez exclure une classe de caractères en indiquant 'ˆ' comme le premier caractère de la classe.

Exemple: [ˆabc] correspond à tout caractère autre que 'a', 'b' ou 'c'.

Plages

Les plages sont représentées par le symbole '-'.

Exemple: [a-z][0-9] trouve un caractère allant de 'a' à 'z' suivi d'un chiffre allant de '0' à '9'.
Exemple: [a-zA-Z0-9] trouve une lettre ou un chiffre.

Intervalles

Les expressions d'intervalle sont indiquées par les symboles '{' et '}'.

Exemple: 0-9{1,4} trouve 1-4 chiffres.
Exemple: 0-9{3,} trouve 3 chiffres ou plus.
Exemple: 0-9{4} trouve exactement 4 chiffres.

Extraction des sous-expressions

Pour extraire une partie de l'expression, placez la sous-expression entre '<' et '>'.

Exemple: Pour extraire le numéro de programme 1234 de la chaîne PRG=1234, indiquez PRG=<[0-9]{4}>.

Expressions rationnelles

Une expression rationnelle ou expression régulière (ER) est une ou plusieurs branches non vides, séparées par l'opérateur '|'. Elle établit une correspondance avec tout ce qui correspond à une des branches.

Une branche est composée d'une ou plusieurs pièces concaténées. Elle établit une correspondance avec la première pièce, suivi d'une correspondance avec la deuxième pièce, et ainsi de suite.

Une pièce est un atome suivi éventuellement d'un '*', '+', '?' ou d'une limite. Un atome suivi d'un '*' correspond à une séquence de 0 ou plusieurs correspondances de l'atome. Un atome suivi d'un '+' correspond à une séquence de 1 ou plusieurs correspondances de l'atome. Un atome suivi d'un '?' correspond à une séquence de 0 ou 1 correspondance de l'atome.

Une limite est composée d'un '{' suivi d’un entier décimal non signé, suivi éventuellement d’une virgule ',' suivi d'un autre entier décimal non signé, toujours suivi d'un '}'. Les entiers doivent être compris entre 0 et 255 inclus. S'il y en a deux, le premier ne doit pas être supérieur au second. Un atome suivi d'un encadrement contenant un entier i et pas de virgule correspond à une séquence d'exactement i correspondances de l'atome. Un atome suivi d'un encadrement contenant un entier i et une virgule correspond à une séquence d’au moins i correspondances de l’atome. Un atome suivi d'un encadrement contenant deux entiers i et j correspond à une séquence de i à j (inclus) correspondances de l'atome.

Un atome est une expression rationnelle encadrée par des parenthèses '()' (correspondant à une correspondance de l’expression rationnelle), un ensemble vide '()' (correspondant à une chaîne vide), une expression entre crochets (voir ci-dessous), un point '.' (correspondant à tout caractère unique), un 'ˆ' (correspondant à la chaîne vide au début d'une ligne), un '$' (correspondant à la chaîne vide à la fin d'une ligne), une '\' suivie d’un des caractères ˆ.[$()|*+?{\ (correspondant au caractère considéré comme un caractère ordinaire), une '\' suivie de tout autre caractère (correspondant au caractère considéré comme un caractère ordinaire, comme si le '\' était absent), ou un caractère unique sans signification particulière (correspondant à ce caractère). Une '{' suivie d'un caractère autre qu'un chiffre est considérée comme un caractère ordinaire et non comme un caractère de début d'une limite. Il est illégal de terminer une ER par une '\'.

Une expression entre crochets est une liste de caractères entourée de '[ ]'. Elle correspond normalement à n'importe quel caractère de la liste (voir cependant ci-dessous). Si la liste commence par 'ˆ', la correspondance est établie avec tout caractère (voir ci-dessous) non compris dans la liste. Si deux caractères de la liste sont séparés par un tiret '-', il s'agit d'un raccourci pour représenter tous les caractères compris entre ces deux-là (inclus) dans la séquence de classement. Par exemple '[0-9]' en ASCII correspond à n'importe quel chiffre décimal. Deux plages de caractères ne peuvent pas partager la même borne comme dans l'exemple 'a-c-e'.

Vous pouvez inclure un ']' littéral dans la liste s'il en est le premier caractère (à la suite d'un éventuel 'ˆ'). Un '-' littéral peut être inclus dans la liste s'il en est le premier ou le dernier caractère ou s'il est la deuxième borne d'une plage. Vous pouvez utiliser un '-' littéral comme première borne d'une plage s'il est encradré par '[.' et '.]' et devient de ce fait un élément d'interclassement (voir ci-dessous). À l'exception de ces caractères et de certaines combinaisons utilisant '[' (voir les paragraphes suivants), tous les autres caractères spéciaux, y compris '\', perdent leur signification spéciale dans une expression entre crochets.

Dans une expression entre crochets, un élément d'interclassement (un caractère, une séquence de caractères multiples qui s'interclasse comme un élément unique, ou le nom d'une séquence de classement) encadré par '[.' et '.]' représente la séquence de caractères de cet élément d'interclassement. La séquence est un élément unique de la liste de l'expression entre crochets. Une expression entre crochets contenant un élément d'interclassement multi-caractères peut donc correspondre à plusieurs caractères. Par exemple, si la séquence de classement inclut un élément d'interclassement 'ch', alors l'ER '[[.ch.]]*c' établit une correspondance avec les cinq premiers caractères de 'chchcc'.

Dans une expression entre crochets, un élément d'interclassement placé entre '[=' et '=]' est une classe d'équivalence représentant les séquences de caractères de tous les éléments d'interclassement équivalents à celui-ci, y compris lui-même. (S'il n'existe pas d'autres éléments d'interclassement équivalents, le traitement correspond à celui obtenu si les délimiteurs étaient '[.' et '.]'.) . Par exemple, si o et ˆ sont les membres d'une classe d'équivalence, alors '[[=o=]]', '[[=ˆ=]]', et '[oˆ]' sont tous synonymes. Une classe d'équivalence ne peut pas être la borne d'une plage.

Dans le cas où une ER peut correspondre à plusieurs sous-chaînes d'une chaîne donnée, l'ER correspond à celle qui apparaît la première dans la chaîne. Si l'ER peut correspondre à plusieurs sous-chaînes à partir de ce point, la correspondance la plus longue est retenue. Les sous-expressions correspondent aussi à la plus longue sous-chaînes possible, à condition que la correspondance complète soit la plus longue possible, priorité étant donnée aux sous-expressions commençant plus tôt dans l'ER sur celles commençant plus loin. Notez que les sous-expressions de haut niveau ont priorité sur les sous-expressions de bas-niveau les composant.

La longueur des correspondances est mesurée en caractères, et non en éléments d'interclassement. Une chaîne vide est considérée plus longue qu’aucune correspondance. Par exemple 'bb*' correspond aux trois caractères du milieu de 'abbbc', '(wee|week)(knights|nights)' correspond aux dix caractères de 'weeknights' , quand '(.*).*' est mis en correspondance avec 'abc', la sous-expression entre parenthèses correspond aux trois caractères, et quand '(a*)*' est mis en correspondance avec 'bc', l'ER entière et la sous-expression entre parenthèses correspondent toutes deux à une chaîne vide.

Exemple de trigger avancé

Les triggers avancés peuvent être utilisés pour rechercher des numéros de programme, des informations de chemins d'accès, etc. L'exemple ci-après peut être utilisé dans la configuration du protocole standard de la réception automatique pour identifier le nom de programme du fichier reçu.

À supposer que le nom de programme soit sauvegardé dans le programme CN sous O2123 (où 2123 est le numéro de programme), mais que nous ne voulons rechercher des numéros de programme dans une ligne spécifique que si la ligne précédente commence par le caractère %. Dans ce cas, nous devons indiquer:

Ce trigger comprend les éléments suivants:

ˆLe trigger doit être trouvé au début d'une ligne
%Rechercher le caractère %
.Correspondance avec tout caractère
*Zéro ou plusieurs correspondances du caractère précédent, dans ce cas tout caractère
\LFCorrespondance avec caractère de saut de ligne
.Correspondance avec tout caractère
*Zéro ou plusieurs correspondances du caractère précédent, dans ce cas tout caractère
OLook for the character O
<Début du nom de programme
[0-9]Tout caractère compris entre 0 et 9
{4}Match 4 of the previous character, in this case any character in the range from 0 to 9
>Fin du nom de programme
(Début de la sous-expression
[ˆ0-9]Tout caractère hors de la plage 0 à 9
+Une ou plusieurs correspondances du caractère précédent, dans ce cas tout caractère hors de la plage 0 à 9
|Correspondance avec l'expression à gauche ou à droite de '|'.
$Doit être en fin de ligne
)Fin de la sous-expression

Interprétation:

Rechercher une ligne commençant par % et accepter tous les caractères jusqu'à la fin de la ligne. Sur la ligne suivante, accepter tous les caractères jusqu'à l'occurrence de O suivi de 4 chiffres. Ces 4 chiffres doivent être suivis d'un ou plusieurs caractères autres que des chiffres ou doivent être en fin de ligne.

La dernière partie indique qu'exactement 4 chiffres doivent être spécifiés. Dans la séquence O12345, O est suivi de 4 chiffres, suivi d'un caractère qui est un chiffre (5), alors il n'y a pas de correspondance.

'<' et '>' sont les délimiteurs de la partie de l'expression à extraire pour avoir le numéro de programme. Dans ce cas, 4 chiffres.