Beispiel 3 - Komplexe Kontur
Im Auslieferungszustand gibt es drei Beispieldatensätze um die Funktionalität verständlich zu machen.
Die Sektion für eine oder mehrerer komplexerer Konturen lautet "Advanced contour example protocol".
Folgend der Dateiinhalt der Sektion:
<Format ID="ADVANCED_CONTOUR_PROTOCOL_EXAMPLE" Caption="Advanced contour example protocol" RegEx="(?U)(Cont(\d)_P(\d+)([XY])(\d+)\\)|(Cont(\d)_(Col)([\da-fA-F]+)\\)\x3b">
<VarExt Name="C$(2)_$(3)$(4)" Value="$(5)" />
<VarExt Name="C$(7)$(8)" Value="$(9)" />
<TestData>Cont1_P1X36\Cont1_P1Y62\Cont1_P2X80\Cont1_P2Y233\Cont1_P3X279\Cont1_P3Y361\Cont1_P4X296\Cont1_P4Y566\Cont1_P5X496\Cont1_P5Y625\Cont1_Col00ff00\Cont2_P1X0\Cont2_P1Y1000\Cont2_P2X350\
Cont2_P2Y100\Cont2_P3X700\Cont2_P3Y1000\Cont2_P4X1050\Cont2_P4Y100\Cont2_P5X1400\Cont2_P5Y1000\Cont2_Colff0000\Cont3_P1X26\Cont3_P1Y52\Cont3_P2X80\Cont3_P2Y236\Cont3_P3X279\Cont3_P3Y361\Cont3
_P4X296\Cont3_P4Y566\Cont3_P5X496\Cont3_P5Y625\Cont3_Col00ff00\;
</TestData>
</Format>
Dieses Protokoll kann beispielsweise verwendet werden, um eine oder mehrere komplexe Konturen mit unlimitierter Anzahl an Variablen-Gruppen mit einem einfachen Klartext-String zu verändern.
Als Testdaten ist folgender ASCII-Stream hinterlegt:
Cont1_P1X36\Cont1_P1Y62\Cont1_P2X80\Cont1_P2Y233\Cont1_P3X279\Cont1_P3Y361\Cont1_P4X296\Cont1_P4Y566\Cont1_P5X496\Cont1_P5Y625\Cont1_Col00ff00\Cont2_P1X0\Cont2_P1Y1000\Cont2_P2X350\Cont2_P2Y1
00\Cont2_P3X700\Cont2_P3Y1000\Cont2_P4X1050\Cont2_P4Y100\Cont2_P5X1400\Cont2_P5Y1000\Cont2_Colff0000\Cont3_P1X26\Cont3_P1Y52\Cont3_P2X80\Cont3_P2Y236\Cont3_P3X279\Cont3_P3Y361\Cont3_P4X296\Co
nt3_P4Y566\Cont3_P5X496\Cont3_P5Y625\Cont3_Col00ff00\;
Die dazugehörige RegExp hält sich trotz der Komplexität hier recht klein.
Es wird hier, mit zwei durch ein ODER getrennten Filter, die Positionsdaten von den Farbdaten getrennt behandelt:
(?U)(Cont(\d)_P(\d+)([XY])(\d+)\\)|(Cont(\d)_(Col)([\da-fA-F]+)\\)\x3b
Folgend sehen Sie ein Beispiel, der durch die RegEx-Definition gefilterten Gruppe:
Match[30]: "Cont3_P5Y625\"
[$1]: "Cont3_P5Y625\"
[$2]: "3"
[$3]: "5"
[$4]: "Y"
[$5]: "625"
Match[31]: "Cont3_Col00ff00\;"
[$1]: ""
[$2]: ""
[$3]: ""
[$4]: ""
[$5]: ""
[$6]: "Cont3_Col00ff00\"
[$7]: "3"
[$8]: "Col"
[$9]: "00ff00"
Die zuvor gefilterten Teildaten müssen nun in verschiedene Variablen aufgeteilt werden.
Dies geschieht bei diesem Beispiel mit zwei dynamischen untergeordneten mappings.
<VarExt Name="C$(2)_$(3)$(4)" Value="$(5)" />
<VarExt Name="C$(7)$(8)" Value="$(9)" />
Aufbau der ersten Variable:
"C", gefolgt von den Daten der zweiten Gruppe aus der RegEx-Filterung.
Nun ein Unterstrich, gefolgt mit der dritten und vierten gefilterten Gruppe.
Hier würde bei der ersten Filterung also ein "C3_5Y" als Name genutzt werden.
Der Wert zu diesem Namen aus der Gruppe fünf generiert und wäre somit "625".
Bei der zweiten Variable für die anzuwendende Farbe wird daher folgendes generiert:
Name: "C3Col"
Value: "00ff00"
Die Variablennamen können Kunden- und Anwendungsspezifisch benannt werden und haben an dieser Stelle nur einen symbolischen Namen.