Verwendung von Regular Expressions in Aufteilen-Bedingungen
Wenn Sie mit Aufteilen-Containern arbeiten (siehe auch Aufteilen), können Sie innerhalb des Aufteilen-Containers optional auch eine Bedingung erstellen, um das Textfragment weiterzuleiten, wenn es eine Übereinstimmung mit einer Regular Expression enthält. In diesen Fällen können Sie den Anfang oder das Ende des zu suchenden Texts mit dem Caret- ( ^ ) und dem Dollar-Zeichen ( \$ ) markieren, es sei denn C++ ist als Zieltransformationssprache eingestellt. (In C++ werden das Caret- und das Dollar-Zeichen als Zeilenbeginn bzw. -ende und nicht als der Beginn bzw. das Ende des gesamten Texts interpretiert).
So verwenden Sie eine Regular Expression in einer Aufteilen-Bedingung:
1.Definieren Sie den Container-Typ als Aufteilen (klicken Sie auf die rechte obere Ecke des Containers und wählen Sie anschließend Aufteilen aus).
2.Klicken Sie auf die Schaltfläche Bedingung anhängen ( ), um eine neue Bedingung anzuhängen.
3.Definieren Sie als Bedingungstyp Der Inhalt enthält eine Übereinstimmung mit einer Regular Expression und geben Sie die Regular Expression in das Textfeld daneben ein.
![FlexTextRegEx04](./images/flextextregex04.png)
Beispiel
Angenommen, Sie müssen Daten aus der unten dargestellten Datenbank-Log-Datei mappen (Sie finden diese Datei unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2024\MapForceExamples\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 ended 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 ended 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 ended 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 ended 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 ended 18:11:51: WindowsFolder.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E. Return value 1. |
Sie möchten Folgendes erreichen:
1.Sammlung aller Zeilen, die einen Rückgabewert enthalten, in einer Liste, d.h. die Liste muss alle Zeilen enthalten, die den Wert "Return value 1" oder "Return value 0" oder irgendeinen anderen in Form einer Ziffer ausgedrückten Rückgabewert enthalten.
2.Sammlung aller Zeilen, deren Text den Wert "Action start" enthält, in einer anderen Liste.
Zu diesem Zweck können Sie den Text mit Hilfe eines Mehrmals trennen-Containers in einzelne Zeilen aufgliedern. Anschließend können Sie die einzelnen Zeilen wie erforderlich mit Hilfe eines Aufteilen-Containers weiterleiten. Der Aufteilen-Container besteht aus den folgenden drei Bedingungen:
1.Weiterleiten der aktuellen Zeile an Output A, falls die Zeile den Wert "Action started" enthält. Sie können solche Zeilen mit Hilfe einer Bedingung vom Typ "Inhalt beginnt mit" und durch Eingabe des Werts "Action started" suchen.
2.Weiterleiten der aktuellen Zeilen an Output B, falls die Zeile einen Rückgabewert enthält. Sie können solchen Zeilen mit Hilfe der Regular Expression Return value [0-9]\. suchen. Diese Regular Expression findet eine Übereinstimmung, wenn die Zeile den Text "Return value" gefolgt von einer einzigen Ziffer, gefolgt von einem Punkt enthält. Der umgekehrte Schrägstrich ( \ ) vor dem Punkt dient als Escape-Zeichen. Es gibt an, dass der Punkt als normales Zeichen und nicht als Metazeichen zu behandeln ist.
3.Weiterleiten der aktuellen Zeile an Output C (<default>), wenn keine der oben definierten Bedingungen auf die Zeile zutrifft.
So erstellen Sie die FlexText-Vorlage, die die obigen Aufgaben durchführt:
1.Klicken Sie im Menü Einfügen auf Textdatei.
![Dlg_InsertTextComponent](./images/dlg_inserttextcomponent.png)
2.Klicken Sie auf Neue Struktur auf Basis einer Beispieldatei grafisch erstellen und speichern Sie die FlexText .mft-Vorlage in einem Verzeichnis Ihrer Wahl.
3.Wenn Sie aufgefordert werden, eine Textdatei zu öffnen, navigieren Sie zur Datei <Dokumente>\Altova\MapForce2024\MapForceExamples\SampleDatabaseLog.txt.
![FlexTextRegEx06](./images/flextextregex06.png)
4.Klicken Sie auf die rechte obere Ecke des Ausgabe-Containers und wählen Sie die Option Mehrmals trennen. Da wir Carriage return (Wagenrücklauf) als Trennzeichen verwenden, wählen Sie die Modus getrennt (beliebig) und als Trennzeichen <CR><LF>. Daraufhin wird ein neuer Ausgabe-Container erstellt, der aus 17 Blöcken (einem für jede Zeile) besteht.
![FlexTextSwitchByRegEx02](./images/flextextswitchbyregex02.png)
5.Klicken Sie auf die rechte obere Ecke des neuen Ausgabe-Containers und wählen Sie die Option Aufteilen. FlexText behandelt nun den Inhalt des Containers als Aufteilungsoption. Wie Sie unten sehen, wurde eine <Standard> Aufteilbedingung automatisch erstellt. Diese Bedingung leitet jeden Text, der mit keiner anderen Bedingung übereinstimmt, an einen neuen Container weiter. Zu diesem Zeitpunkt sind keine anderen Bedingungen definiert, daher wird derzeit der gesamte Text an die Standardausgabe <Standard> weitergeleitet.
![FlexTextSwitchByRegEx03](./images/flextextswitchbyregex03.png)
6.Klicken Sie auf die Schaltfläche Bedingung anhängen ( ) und fügen Sie eine Bedingung vom Typ Inhalt beginnt mit mit dem Wert "Action start" hinzu (siehe unten). Diese Bedingung leitet Text, der mit "Action start" beginnt, an einen neuen Container weiter.
![FlexTextSwitchByRegEx04](./images/flextextswitchbyregex04.png)
7.Klicken Sie auf die Schaltfläche Bedingung anhängen ( ) und fügen Sie eine Bedingung vom Typ Der Inhalt enthält eine Übereinstimmung mit einer Regular Expression mit dem Wert Return value [0-9]\. hinzu. Wenn Sie jetzt zum Block 5 von 17 navigieren, sehen Sie, dass diese Bedingung diesen Block an einen neuen Container weiterleitet, da der Block eine Übereinstimmung mit der Regular Expression enthält.
![FlexTextSwitchByRegEx05](./images/flextextswitchbyregex05.png)
Sie haben den Aufteilen-Container nun so konfiguriert, dass er Text auf Basis von Bedingungen an eine andere Ausgabe weiterleitet. Es gibt drei Aufteilen-Bedingungen und drei mögliche Ausgaben (für jede Bedingung eine). In den restlichen Schritten dieses Tutorials wird beschrieben, wie Sie jede der Ausgaben in eine separate Textdatei schreiben können.
8.Klicken Sie auf die rechte obere Ecke der einzelnen Ausgabe-Container und wählen Sie die Option Als Wert speichern. Doppelklicken Sie außerdem auf die Titelleiste der einzelnen Ausgabe-Container und geben Sie einen beschreibenden Namen ein: Output A, Output B und Output C.
![FlexTextSwitchByRegEx06](./images/flextextswitchbyregex06.png)
9.Speichern und schließen Sie die FlexText-Vorlage.
Die erforderliche FlexText-Vorlage wurde somit jetzt erstellt. Um zu sehen, wie diese Vorlage funktioniert, öffnen Sie die folgende Tutorial-Datei: <Dokumente>\Altova\MapForce2024\MapForceExamples\FlexTextSwitchByRegEx.mfd.
![FlexTextSwitchByRegEx07](./images/flextextswitchbyregex07.png)
FlexTextSwitchByRegEx.mfd
In dem in der Abbildung gezeigten Mapping FlexTextSwitchByRegEx.mfd werden Textdaten aus der Datei <Dokumente>\Altova\MapForce2024\MapForceExamples\SampleDatabaseLog.txt gelesen und in drei separate Textdateien konvertiert: Output A, Output B und Output C. Jede der Zieltextdateien enthält nur die Zeilen, auf die eine der drei zuvor in der FlexText-Vorlage definierten Bedingungen zutrifft. Um die Ausgabe einer bestimmten Komponente zu sehen, klicken Sie in der rechten oberen Ecke der Komponente auf die Schaltfläche Vorschaukomponente ( ) und klicken Sie anschließend auf das Register Ausgabe.