Développer la sélection de ligneJe souhaite sélectionner un groupe spécifique de lignes entourant une ligne facilement identifiable. Dans l'exemple ci-dessous, je peux capturer la ligne qui m'intéresse. Je dois maintenant l'étendre de 11 lignes au-dessus et de 15 lignes en dessous pour obtenir le bloc de données qui m'intéresse.
Current Data Table() << Select where( Contains( As Column(2), "1st Thickness" );
Automatisation et scriptsRe: Développer la sélection de lignesalut, tu peux utiliser
dt = current data table();
block of interest = (dt << get selected rows()) + -11::15;
dt << Select Rows( block of interest )
Re: Développer la sélection de ligneN'utilisez pas Sélectionner où, utilisez Obtenir les lignes où
Il renverra le numéro de ligne pour la ligne qui a votre 1ère valeur d'épaisseur,
puis utilisez Select Rows() pour sélectionner les 11 lignes au-dessus et les 15 lignes en dessous
Re: Développer la sélection de ligneHogi
Cela semble intéressant mais me donne une erreur « Argument d'index dans l'accès ou l'évaluation de 'Index',.................................. »
Merci
Re: Développer la sélection de ligneL'approche de @hogi est correcte. La syntaxe ne l'est pas.
Voici mon approche
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 );
Je vous suggère de changer un peu votre paradigme pour ne pas compter sur le fait d'obtenir du code que vous venez de couper et coller dans votre script, mais plutôt d'étudier le code fourni, puis de le mouler dans votre code, compte tenu des nouvelles perspectives qu'il fournit.
Re: Développer la sélection de ligneQuelques suggestions supplémentaires
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: Développer la sélection de ligneJim
Cela fonctionne, mais seules les lignes supplémentaires de la première ligne sélectionnée dans la matrice sont sélectionnées. Devrais-je configurer une itération pour chaque numéro de ligne initialement sélectionné afin de toutes les capturer ?
Re: Développer la sélection de ligneJim
J'ai ajouté l'itération et il semble que j'obtienne ce que je recherche.
Merci
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: Développer la sélection de ligneD'après votre message initial, il semble que vous souhaitiez sélectionner uniquement une seule ligne. La boucle est sans aucun doute l'option la plus simple et, selon vos données, elle pourrait être suffisamment rapide sans aucune optimisation.
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);
Et une option un peu plus compliquée
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);