Espandi selezione rigaVoglio selezionare un gruppo specifico di righe che circondano una riga che posso identificare facilmente. Nell'esempio seguente, riesco a catturare la riga di interesse; ora devo espanderla di 11 righe sopra e 15 righe sotto per ottenere il blocco di dati di interesse.
Current Data Table() << Select where( Contains( As Column(2), "1st Thickness" );
Automazione e scriptingRe: Espandi selezione rigaCiao, puoi usare
dt = current data table();
block of interest = (dt << get selected rows()) + -11::15;
dt << Select Rows( block of interest )
Re: Espandi selezione rigaNon usare Seleziona dove, usa Ottieni righe dove
Restituirà il numero di riga per la riga che contiene il tuo primo valore di Spessore,
quindi utilizzare Select Rows() per selezionare le 11 righe sopra e le 15 righe sotto
Re: Espandi selezione rigaHogi
Sembra interessante, ma mi dà un errore "Argomento indice nell'accesso o nella valutazione di 'Indice',..................................."
Grazie
Re: Espandi selezione rigaL'approccio di @hogi è corretto. La sintassi no.
Ecco il mio approccio
dt = current data table();
block of interest = (dt << get selected rows())[1];
block of interest = index(block of interest-11,block of interest+15);
dt << Select Rows( block of interest );
Ti suggerisco di cambiare un po' il tuo paradigma, non contando di ottenere codice che puoi semplicemente copiare e incollare nel tuo script, ma piuttosto di studiare il codice fornito e poi adattarlo al tuo codice, in base alle nuove informazioni che fornisce.
Re: Espandi selezione rigaAncora qualche suggerimento
Names Default To Here(1);
dt = Current Data Table();
Try(
r = (dt << get selected rows())[1];
dt << Select Where(r - 11 <= Row() <= r + 15);
);
Names Default To Here(1);
below = 11;
above = 15;
dt = Current Data Table();
r = dt << Get Selected Rows();
If(N Items(r) != 1,
Throw("Incorrect amount of rows selected");
);
rows_of_interest = Max(1, r - below)::Min(N Rows(dt), r + above);
dt << Select Rows(rows_of_interest);
Write();
Re: Espandi selezione rigaJim
Funziona, ma seleziona solo le righe aggiuntive per la prima riga selezionata nella matrice. Immagino che dovrei impostare un'iterazione per ogni numero di riga inizialmente selezionato per catturarle tutte?
Re: Espandi selezione rigaJim
Ho aggiunto qualche iterazione e sembra che stia ottenendo ciò che cerco.
Grazie
dt = current data table();
Current Data Table() << Select where( Contains( As Column(2), "1st Thickness" ));
sel_rows = Current Data Table() << Get Rows where( Contains( As Column(2), "1st Thickness" ));
j=1;
For( i = 1, i <= N Items( sel_rows ), i++,
block_of_interest = (dt << get selected rows())[j];
block_of_interest = index(block_of_interest-11,block_of_interest+15);
dt << Select Rows( block_of_interest );
j=j+27;
);
Re: Espandi selezione rigaIn base al tuo messaggio iniziale, sembrava che volessi selezionare solo in base a una singola riga. Il loop è sicuramente l'opzione più semplice che hai e, a seconda dei dati, potrebbe essere abbastanza veloce senza ottimizzazioni.
Names Default To Here(1);
dt = Current Data Table();
selrows = dt << get selected rows();
For Each({r}, selrows,
dt << Select Where(r - 11 <= Row() <= r + 15, current selection("extend"));
);
wait(0);
E un'opzione un po' più complicata
Names Default To Here(1);
dt = Current Data Table();
selrows = dt << get selected rows();
rows_of_interest = {[]};
For Each({r}, selrows,
rs = Max(1, r - 11)::Min(N Rows(dt), r + 15);
Insert Into(rows_of_interest, rs`);
);
Substitute Into(rows_of_interest, Expr(List), Expr(V Concat));
dt << select rows(rows_of_interest);
wait(0);