Gestire i caratteri jolly per unire i tavoliDevo unire più tabelle, ma la colonna su cui devo unire ha i caratteri jolly per una delle colonne delle tabelle. I tavoli non sono eccessivamente grandi, quindi non è necessario che siano molto efficienti.
Nella colonna KEY Table1 in basso potrebbe esserci un singolo carattere alfanumerico in cui si trovano i punti interrogativi. Nelle parentesi ci sono le istruzioni OR, quindi potrebbe essere 1 o 2 o 3 o 4.
Ad esempio, dovrebbe unirsi alle righe 1 e 2 di Table2 poiché i caratteri jolly corrisponderebbero. Ma la riga 3 ha un 9 dove il modello OR ha solo 1 | 2 | 3 | 4.
Stavo pensando di duplicare la riga per ogni possibile combinazione alfanumerica in cui si trovano i punti interrogativi, e per ciascuna combinazione tra parentesi OR il join funzionerebbe, non so come fare.
Tabella 1
| CHIAVE | DATI |
| ?? ABC Y [1 | 2 | 3 | 4] Z | 99999 |
Tavolo 2
| CHIAVE | DATA |
| ABC1YA1Z | 2019/08/14 22:10:10 PM |
| ABCZYB4Z | 2019/08/14 23:11:11 PM |
| ABC1YA9Z | 2019/08/14 12:12:12 PM |
Tabella dei risultati:
| CHIAVE | DATA | DATI |
| ABC1YA1Z | 2019/08/14 22:10:10 PM | 99999 |
| ABCZYB4Z | 2019/08/14 23:11:11 PM | 99999 |
| ABC1YA9Z | 2019/08/14 12:12:12 PM | . |
Ri: Gestire i caratteri jolly per unire i tavoliÈ possibile convertire il formato KEY nel formato delle espressioni regolari.
dt1 è Table1 e dt2 è Table2.
dt1<<NEW column=""></NEW>
Ho provato a usare il aggiornare comando ma non riuscito.
dt2<< update(with(dt1),match columns(regex(:KEY,:KEY_reg ))) //[NOT WORKING]
Ecco un modo manuale per fare il lavoro.
dt1<<NEW column=""></NEW>
Grazie.
Ri: Gestire i caratteri jolly per unire i tavoliGrazie Jara95 - questo è molto vicino alla soluzione. Ho apportato alcune piccole modifiche - non sono sicuro di come stavi facendo riferimento alle righe di colonna usando questo metodo:
dt1[r,"DATA"]
Sono passato a questo metodo e funziona:
dt1:DATA[r]
Ho anche scoperto che con Regex puoi lasciare l'OR | operatori in atto, non è necessario sostituirli.
Un'ultima cosa che ho cambiato è For loop da N Col a N Row.
Quindi la mia sceneggiatura finale è simile a questa:
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];
);
Grazie ancora!