Manejo de comodines para unir mesasNecesito unir varias tablas, pero la columna a la que debo unir tiene comodines para una de las columnas de las tablas. Las tablas no son demasiado grandes, por lo que no es necesario que sean muy eficientes.
En la columna CLAVE de Tabla1 a continuación, podría haber un solo carácter alfanumérico donde se encuentren los signos de interrogación. En los corchetes hay declaraciones OR, por lo que podría ser 1 o 2 o 3 o 4.
Entonces, por ejemplo, debería unirse en las filas 1 y 2 de la Tabla2 ya que los comodines coincidirían. Pero la fila 3 tiene un 9 donde el patrón OR solo tiene 1 | 2 | 3 | 4.
Estaba pensando en duplicar la fila para cada combinación alfanumérica posible donde están los signos de interrogación, y para cada combinación en los corchetes OR, la unión funcionaría, no estoy seguro de cómo hacerlo.
Tabla 1
| LLAVE | DATOS |
| ABC? Y? [1 | 2 | 3 | 4] Z | 99999 |
Tabla 2
| LLAVE | FECHA |
| ABC1YA1Z | 2019/08/14 10:10:10 PM |
| ABCZYB4Z | 2019/08/14 11:11:11 PM |
| ABC1YA9Z | 2019/08/14 12:12:12 PM |
Tabla de resultados:
| LLAVE | FECHA | DATOS |
| ABC1YA1Z | 2019/08/14 10:10:10 PM | 99999 |
| ABCZYB4Z | 2019/08/14 11:11:11 PM | 99999 |
| ABC1YA9Z | 2019/08/14 12:12:12 PM | . |
Re: Manejo de comodines para unir mesasPuede convertir su formato KEY a formato de expresión regular.
dt1 es Table1 y dt2 es Table2.
dt1<<NEW column=""></NEW>
Traté de usar el actualizar comando pero no exitoso.
dt2<< update(with(dt1),match columns(regex(:KEY,:KEY_reg ))) //[NOT WORKING]
Aquí hay una forma manual de hacer el trabajo.
dt1<<NEW column=""></NEW>
Gracias.
Re: Manejo de comodines para unir mesasGracias Jara95, esto está muy cerca de la solución. Hice algunas pequeñas modificaciones, no estoy seguro de cómo hacía referencia a las filas de columnas con este método:
dt1[r,"DATA"]
Cambié a este método y funciona:
dt1:DATA[r]
También descubrí que con Regex puedes dejar el quirófano El | operadores en su lugar, no es necesario sustituirlos.
Una última cosa que cambié es el bucle For de N Col a N Row.
Entonces mi guión final se parece a esto:
dt1 << New Column( "KEY_reg", character, formula( Substitute( dt1:KEY, "?", "[A-Z0-9]" ) ) );
dt2 << New Column( "DATA" );
For( r = 1, r <= N Row( dt1 ), r++,
r1 = dt2 << Get Rows Where( !Is Missing( Regex( dt2:KEY, dt1:KEY_reg[r] ) ) );
dt2:DATA[r1] = dt1:DATA[r];
);
¡Gracias de nuevo!