Eliminazione di una riga in base alla presenza di parole specifiche in una cellaCiao a tutti! Penso che questa potrebbe essere una situazione comune per molti che lavorano con file di dati da vari strumenti. I miei set di dati derivano dall'unione di più file di output da uno strumento specifico. Oltre alle righe di dati utili, ci sono un certo numero di righe in cima a ogni file di output che specificano la ricetta, il file e altri, in genere, queste informazioni sono nella colonna 1. Per elaborare i dati, non ho bisogno di quelle informazioni, quindi voglio eliminare le righe non necessarie contenenti le parole sopra Ricetta, File, ecc. nelle celle nella colonna 1. Nota che potrebbero esserci altre parole nelle stesse celle, ad esempio: "Nome ricetta wafer" o "File gruppo fase", ecc. Ho provato un certo numero di permutazioni su quanto segue, ma ricevo sempre un messaggio di errore che dice: "Invia si aspetta oggetti scriptabili nell'accesso alla valutazione di "Invia", ecc. Grazie mille in anticipo!
dt_new2 << ottieni le righe in cui (contiene (:Colonna 1, "Ricetta"));
dt_new2 << elimina righe;
Aspetta(1);
dt_new2 << ottieni le righe dove (contiene (:Column 1, "File"));
dt_new2 << elimina righe;
Aspetta(1)
Automazione e scriptingFusione e pulizia dei datiRe: Eliminazione di una riga in base alla presenza di parole specifiche in una cellaProva questo
Names Default To Here( 1 );
dt_new2 = Current Data Table();
dt_new2 << select where( Contains( :Column 1, "Recipe" ) );
dt_new2 << delete rows;
Wait( 0 );
dt_new2 << select where( Contains( :Column 1, "File" ) );
dt_new2 << delete rows;
L'indice di scripting
Aiuto=>Indice di scripting
è un'ottima fonte di esempi e sintassi delle affermazioni.
Inoltre, ti consiglio di prenderti il tempo di leggere la Guida allo scripting che si trova nella Guida JMP
Re: Eliminazione di una riga in base alla presenza di parole specifiche in una cellaSe vuoi usare semplicemente << Delete Rows senza argomenti, devi selezionare le righe (come ha mostrato Jim). Un'altra opzione è quella di raccogliere le tue righe in una variabile e usarla (il mio metodo preferito perché salta la selezione di righe "non necessarie", ma la selezione è più visiva se vuoi fare il debug)
Names Default To Here(1);
rows_to_delete = dt_new2 << get rows where(Contains(:Column 1, "Recipe"));
dt_new2 << delete rows(rows_to_delete);
rows_to_delete = dt_new2 << get rows where(Contains(:Column 1, "File"));
dt_new2 << delete rows(rows_to_delete);
Questo comportamento non è documentato in Scripting Index,

ma può essere trovato in JSL Syntax Reference Data Table Messages (jmp.com) e Scripting Guide Delete Rows (jmp.com) (cerca Delete Rows da Script Editor e premi Topic Help)
Re: Eliminazione di una riga in base alla presenza di parole specifiche in una cellaCiao, txnelson, grazie per la risposta! Come ho detto, ho provato un sacco di comandi correlati, tra cui select where + contains, ma senza l'istruzione Names default to here in alto, quell'approccio non funzionava in precedenza. La routine funziona per me ora, grazie mille per il contributo. Saluti!
Re: Eliminazione di una riga in base alla presenza di parole specifiche in una cellaCiao jthi, grazie per la tua risposta, l'ho apprezzata. Mi ricordo sempre di affidarmi di più alle variabili, ma sfortunatamente lo faccio solo quando non ci sono altre opzioni. Un ottimo suggerimento, sono sicuro che sarà utile a molti altri. Salute!
Re: Eliminazione di una riga in base alla presenza di parole specifiche in una cellaPuoi anche farlo senza variabili, ma non lo consiglierei perché è molto più difficile da leggere e da correggere se ci sono problemi.
Names Default To Here(1);
dt_new2 << delete rows(dt_new2 << get rows where(Contains(:Column 1, "Recipe")));
dt_new2 << delete rows(dt_new2 << get rows where(Contains(:Column 1, "File")));