Usar expresiones regulares en condiciones del conmutador
Cuando trabaje con contenedores Conmutador, tiene la opción de crear una condición dentro del Conmutador para poder redirigir el fragmento de texto en caso de que la expresión regular devuelva resultados. Para estos casos puede usar el carácter de acento circunflejo ( ^ ) y del signo del dólar ( \$ ) para señalar el principio o final del texto donde se deben buscar coincidencias (excepto si C++ es el lenguaje de transformación de destino porque en C++, los caracteres ^ y \$ se interpretan como el principio o final de una línea y no del texto entero).
Para usar una expresión regular en una condición del conmutador:
1.Asegúrese de que el tipo de contenedor es Conmutador (si no lo es, haga clic en el icono interactivo del contenedor y elija Conmutador).
2.Haga clic en el botón Anexar condición para agregar una condición nueva.
3.Elija el tipo de condición La expresión regular encontró resultados en el contenido e introduzca a continuación la expresión regular en el recuadro adyacente.
Ejemplo
Imagine que necesita asignar datos de un archivo de registro de BD como el que aparece a continuación (la ruta de acceso de este archivo es <Documentos>\Altova\MapForce2023\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 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. |
En este caso sus objetivos son dos:
1.Recopilar una lista de todas las filas que contienen un valor devuelto. Es decir, la lista debe incluir todas las filas que contienen el valor "Return value 1" o el valor "Return value 0" (o cualquier otro valor devuelto expresado en forma de dígito).
2.Recopilar en otra lista todas las filas cuyo texto contenga el valor "Action start".
Para alcanzar estos dos objetivos puede usar un contenedor División repetida para dividir el texto en filas. Después, puede usar un contenedor Conmutador para redirigir cada fila según corresponda. Es decir, el contenedor Conmutador estará compuesto por tres condiciones:
1.Redirigir la fila actual al resultado A si contiene el valor "Action started". Estas filas se pueden encontrar con ayuda de una condición de tipo El contenido empieza con y asignándole el valor "Action started".
2.Redirigir la fila actual al resultado B si contiene un valor devuelto. Estas filas se pueden encontrar con ayuda de la expresión regular Return value [0-9]\. . Esta expresión regular devolverá resultados si la fila contiene el texto "Return value" seguido de un solo dígito y después un punto. La barra diagonal inversa ( \ ) detona un carácter de escape (indicando que el punto debe tratarse como un carácter normal y no como metacarácter).
3.Redirigir la fila actual al resultado C (<predeterminado>) si la fila no cumple con ninguna de las condiciones anteriores.
Para crear una plantilla FlexText que se ocupe de todas las tareas descritas anteriormente:
1.En MapForce haga clic en el comando de menú Insertar | Archivo de texto.
2.Haga clic en el botón Diseñar una estructura nueva de forma gráfica de acuerdo con un archivo de muestra y guarde la plantilla FlexText (archivo .mft) en el directorio que quiera.
3.Cuando la aplicación le pida que abra un archivo, navegue hasta el archivo <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\SampleDatabaseLog.txt.
4.En el contenedor de salida haga clic en el botón interactivo y seleccione División repetida. Como nuestro carácter de división es el retorno de carro, elija el modo delimitado (flotante) e introduzca el separador <CR><LF>. Esto da lugar a un nuevo contenedor de salida compuesto por 17 bloques (uno por cada fila).
5.En este nuevo contenedor de salida haga clic en el botón interactivo y seleccione Conmutador. FlexText tratará el contenido de este contenedor como un conmutador. Como puede verse más abajo, la condición de conmutación <predeterminado> se crea automáticamente (esta condición redirige a un contenedor nuevo el texto que no cumpla con ninguna de las condiciones). Ahora mismo no hay más condiciones así que todo el texto se redirige al contenedor de salida <predeterminado> por ahora.
6.Haga clic en el botón Anexar condición y añada una condición de tipo El contenido empieza con con el valor Action start (imagen siguiente). Esta condición redirige a un contenedor nuevo todo el texto que empiece con Action start.
7.Haga clic en el botón Anexar condición y añada una condición de tipo La expresión regular encontró resultados en el contenido con el valor Return value [0-9]\. . Si ahora navegamos al bloque 5, veremos que esta condición redirige dicho bloque a un contenedor nuevo (porque la expresión regular devuelve resultados en este bloque).
El contenedor Conmutador ya está configurado para redirigir texto a diferentes contenedores de salida dependiendo de si se cumplen o no sus condiciones. Hay por tanto tres condiciones de conmutación y tres posibles resultados (uno por condición). Ahora solo nos falta escribir cada resultado en un archivo de texto distinto.
8.Haga clic en el botón interactivo de cada contenedor de salida y elija Guardar valor. Haga doble clic en la barra de título de cada contenedor e introduzca un nombre descriptivo como Salida A, Salida B y Salida C.
9.Guarde y cierre la plantilla FlexText.
La plantilla FlexText que necesitábamos para la asignación de datos ya está lista. Para ver como funciona esta plantilla consulte el archivo del tutorial <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\FlexTextSwitchByRegEx.mfd.
FlexTextSwitchByRegEx.mfd
La asignación FlexTextSwitchByRegEx.mfd que puede verse en la imagen anterior lee datos del archivo <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\SampleDatabaseLog.txt y los distribuye a tres archivos de texto distintos: Output A, Output B y Output C. Cada archivo de texto de destino contiene solamente las filas que cumplen con una de las tres condiciones definidas previamente en la plantilla FlexText. Para ver el resultado de un componente de destino, active su botón Vista previa y después abra la pestaña Resultados.