Utiliser des expressions régulières dans des conditions Switch
Lorsque vous travaillez avec des conteneurs Switch (voir aussi Switch), vous avez la possibilité de créer une condition à l’intérieur du conteneur Switch pour rediriger le fragment de texte s’il contient une correspondance d’expression régulière. Dans ces cas, vous pouvez utiliser les caractères caret ( ^ ) et dollar ( $ ) pour faire correspondre le début ou la fin du texte à chercher, sauf lorsque C++ est défini en tant que langage de transformation de cible. (Dans C++, les caractères caret et dollar sont interprétés en tant que le début ou la fin d’une ligne, pas en tant que le début ou la fin du texte complet).
Pour utiliser une expression régulière dans une condition Switch :
1.Définir le type de conteneur en tant que Switch (cliquer sur le coin supérieur droit du conteneur, puis cliquer sur Switch).
2.Cliquer sur la touche Ajouter condition ( ) pour ajouter une nouvelle condition.
3.Définit le type de condition sur Contenu contient une correspondance d’expression régulière et saisir l’expression régulière dans le champ de saisie adjacent.
Exemple
Partons du principe que vous devez mapper des données depuis le fichier de journal de la base de données représenté ci-dessous (vous pouvez aussi trouver ce fichier dans le chemin suivant : <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\SampleDatabaseLog.txt).
Action 18:11:51: INSTALL. Action start 18:11:51: INSTALL. Action 18:11:51: WindowsFolder.68B7C6D9_1DF2_54C1_FF1F_C8B3B9A1E18E. Action start 18:11:51: WindowsFolder.68B7C6D9_1DF2_54C1_FF1F_C8B3B9A1E18E. Action start 18:11:51: WindowsFolder.68B7C6D9_1DF2_54C1_FF1F_C8B3B9A1E18E. Return value 1. Action 18:11:51: SystemFolder.68B7C6D9_1DF2_54C1_FF1F_C8B3B9A1E18E. Action start 18:11:51: SystemFolder.68B7C6D9_1DF2_54C1_FF1F_C8B3B9A1E18E. Action start 18:11:51: SystemFolder.68B7C6D9_1DF2_54C1_FF1F_C8B3B9A1E18E. Return value 0. Action 18:11:51: WindowsFolder.9BAE13A2_E7AF_D6C3_FF1F_C8B3B9A1E18E. Action start 18:11:51: WindowsFolder.9BAE13A2_E7AF_D6C3_FF1F_C8B3B9A1E18E. Action start 18:11:51: WindowsFolder.9BAE13A2_E7AF_D6C3_FF1F_C8B3B9A1E18E. Return value 0. Action 18:11:51: SystemFolder.9BAE13A2_E7AF_D6C3_FF1F_C8B3B9A1E18E. Action start 18:11:51: SystemFolder.9BAE13A2_E7AF_D6C3_FF1F_C8B3B9A1E18E. Action start 18:11:51: SystemFolder.9BAE13A2_E7AF_D6C3_FF1F_C8B3B9A1E18E. Return value 1. Action 18:11:51: WindowsFolder.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E. Action start 18:11:51: WindowsFolder.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E. Action start 18:11:51: WindowsFolder.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E. Return value 1. |
Vos objectifs sont les suivants :
1.Rassembler dans une liste toutes les lignes contenant une valeur de retour. C’est à dire, la liste doit contenir chaque ligne qui contient la valeur "Return value 1" ou la valeur "Return value 0", ou une des autres valeurs de retour exprimées sous forme de chiffre.
2.Rassembler dans une liste toutes les autres lignes dans laquelle le texte contient la valeur "Action start".
Pour atteindre ces objectifs, vous pouvez utiliser un conteneur Partage répété pour partager le texte en lignes individuelles. Après cela, vous pouvez utiliser un conteneur Switch pour rediriger chaque ligne selon les exigences. Concrètement, le conteneur Switch consistera en trois conditions, comme suit :
1.Rediriger la ligne actuelle dans la sortie A si elle contient la valeur "Action started". Vous pouvez trouver ce type de lignes en utilisant une condition de type "Content starts with", et saisir "Action started" en tant que valeur.
2.Rediriger la ligne actuelle pour sortir B si elle contient une valeur de retour. Vous pouvez trouver ce type de lignes en utilisant l’expression régulière Return value [0-9]\. . Cette expression régulière retournera une correspondance si la ligne contient le texte "Return value", suivie par un seul chiffre, suivi d’un point. La barre oblique inversée ( \ ) placée avant le point final agit en tant que caractère d’échappement, pour indiquer que le point doit être traité en tant que caractère normal, pas en tant que métacaractère.
3.Rediriger la ligne actuelle pour sortir C (<default>) si la ligne ne satisfait aucune des conditions ci-dessus.
Pour créer le modèle FlexText qui effectue les tâches ci-dessus :
1.Dans le menu Insérer, cliquer sur Fichier de texte.
2.Cliquer sur Concevoir graphiquement une nouvelle structure basé sur un fichier d’échantillon et enregistrer le modèle FlexText .mft dans un répertoire de votre choix.
3.Sur invitation d’ouvrir un fichier de texte, chercher le fichier <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\SampleDatabaseLog.txt.
4.Cliquer sur le coin supérieur droit du conteneur de sortie et choisir Partage répété. Puisque nous utilisons le retour de chariot en tant que caractère de partage, choisir le mode délimité (flottant), et <CR><LF> en tant que séparateur. Cela permet de créer un nouveau conteneur de sortie qui consiste en 17 blocs (un pour chaque ligne).
5.Cliquer sur le coin supérieur droit du nouveau conteneur de sortie et choisir Switch. À présent, FlexText traitera le contenu du conteneur en tant que switch. Comme indiqué ci-dessous, une condition switch <default> a été créée automatiquement — cette condition redirige vers un nouveau conteneur tous les textes qui ne correspondent pas à d’autres conditions. À ce niveau, aucune autre condition n’a été définie, c’est pourquoi tout le texte est actuellement redirigé vers la sortie <default>.
6.Cliquer sur la touche Ajouter condition ( ) et ajouter la condition de type Contenu commence par avec la valeur "Action start", comme indiqué ci-dessous. Cette condition redirige vers un nouveau conteneur tout texte commençant par "Action start".
7.Cliquer sur la touche Ajouter condition ( ) et ajouter la condition de type Contenu contient une correspondance d’expression régulière avec la valeur Return value [0-9]\. . Si vous parcourez le bloc 5 de 17, vous verrez que cette condition redirige ce bloc vers un nouveau conteneur, puisque le bloc contient une correspondance pour l’expression régulière.
Vous avez maintenant configuré le conteneur Switch de manière à rediriger le texte dans une sortie différente sur la base des conditions. Il existe trois conditions switch et trois sorties possibles (une sortie pour chaque condition). Les étapes restantes de ce tutoriel vous montrent comment écrire chaque sortie dans un fichier de texte séparé.
8.Cliquer sur le coin supérieur droit de chaque conteneur de sortie et choisir Stocker en tant que valeur. De plus, double-cliquer sur la barre de titre de chaque sortie et saisir un nom descriptif : Output A, Output B et Output C, respectivement.
9.Enregistrer et fermer le modèle FlexText.
Le modèle FlexText requis est maintenant créé. Vous pouvez voir comment ce modèle fonctionne en ouvrant le fichier de tutoriel suivant : <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\FlexTextSwitchByRegEx.mfd.
FlexTextSwitchByRegEx.mfd
Le mappage FlexTextSwitchByRegEx.mfd illustré dans la capture d’écran lit des données de texte depuis le fichier <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\SampleDatabaseLog.txt et le convertir dans trois fichiers de texte séparés : Output A, Output B et Output C. Chacun des fichiers de texte de cible contient uniquement les lignes qui satisfont une des trois conditions définies précédemment dans le modèle FlexText. Pour consulter la sortie d’un composant de cible particulier, cliquer sur la touche Consulter composant ( ) dans le coin supérieur droit du composant, puis cliquer sur l’onglet Sortie.