Comment sélectionner toutes les cellules colorées dans un tableau de donnéesUn tableau de données m'a été remis dans lequel certaines lignes sont colorées en rouge pour indiquer des problèmes, mais je ne connais pas la logique derrière ces problèmes. Comment puis-je sélectionner toutes les lignes colorées en rouge dans JSL ?
Re : Comment sélectionner toutes les cellules colorées dans un tableau de donnéesdt = Open("C:/temp/Cars_modified.jmp");
//______________________________________________________________________________________
//A function to find the colored cells in a specific column.
//-15341335 = reddish color, 73 = yellowish, 36=greenish
get_colored_cells = Function( {col}, {_s,i, xp, clr_aa=0 },
// If IsMissing(clr) then get all colors
_s = col << get script ;
for(i=1, i<=narg(_s) , i++,
xp = Arg(_s, i);
if(Head Name(xp) =="Color Cells",
//this only works if the color is an integer might need a for loop to change the
//key to the RGB value
clr_aa = Associative Array(Arg(xp,1));
clr_aa << set default value(0);
Break()
);
);
clr_aa
);
//_______________________________________________________________________________________
// Usage examples:
model_aa = get_colored_cells( Column("Model"));
dt<< select rows (model_aa[73]);J'ai modifié l'exemple ci-dessus pour sélectionner des cellules jaunâtres, et cela a fonctionné lorsqu'il y avait plusieurs couleurs dans la colonne "Modèle". Lorsqu’il n’y a qu’une seule couleur dans la colonne, ça ne marche pas. Comment puis-je modifier le script afin que les cellules colorées de la colonne Modèle puissent être sélectionnées lorsqu'une seule couleur est utilisée dans la colonne ?
Re : Comment sélectionner toutes les cellules colorées dans un tableau de donnéesEnsuite, vous souhaitez utiliser le code suivant (modifié à partir de @gzmorgan0 code)
//get and table row with a specified color
_colorRows = dt << get rows where (Color Of( Row State( Row() ) ) != 0) ;
dt<<SELECT rows=""></SELECT>
Re : Comment sélectionner toutes les cellules colorées dans un tableau de donnéesDans ce cas, les lignes sont colorées et non des cellules individuelles.
Re : Comment sélectionner toutes les cellules colorées dans un tableau de donnéesComme Jim l'a déclaré, la coloration des cellules peut être liée ou indépendante des couleurs des lignes.La seule façon pour moi d'accéder aux couleurs de cellule pour une colonne spécifique est d'obtenir le script de colonne et de "décompresser" les arguments de l'expression (script).
Si une colonne contient des cellules colorées, elle a un argument Color Cells( {... } ) où la liste contient une ou plusieurs listes, le premier élément de chaque liste est le numéro de couleur et le deuxième élément de la liste est une autre liste, une liste de cellules (lignes) avec cette couleur.Le format de liste à 2 éléments est appelé un paire nom-valeur . Le script ci-joint ne gère pas le cas où la couleur de la cellule n'est pas un nombre entier.
J'aimerais que JMP fasse des cellules de couleur une propriété de colonne afin que col << get Column Property("Cell Colors") renvoie la liste, sans rechercher l'argument.
Jim pourrait avoir une solution plus simple. Ci-joint le tableau Cars_modified.jmp et un script qui l'utilise.Le script fait référence à la table à partir de c:/temp, modifiez donc le script pour avoir le chemin d'accès correct à la table.
Re : Comment sélectionner toutes les cellules colorées dans un tableau de donnéesIl n’existe pas de moyen direct d’obtenir cela.En partie parce que le problème est de savoir si les lignes sont colorées ou si les cellules sont colorées.Pour déterminer cela, si vous regardez dans la colonne qui contient le numéro de ligne, c'est-à-dire regardez dans la colonne d'état de la ligne, et s'il y a un marqueur dans les lignes où les lignes sont colorées, et qu'il est de la même couleur. comme la ligne, alors les lignes sont colorées.Si dans une ligne colorée, il n'y a pas de marqueur de couleur dans la colonne d'état de la ligne, chaque cellule est colorée.
Lequel de ces cas est votre cas ?
Re : Comment sélectionner toutes les cellules colorées dans un tableau de donnéesBelle astuce - via le script de colonne ! 
:folded_hands: Indexation d'expression : l'accès en lecture et en écriture pourrait faciliter la
if(Head Name(xp) =="Color Cells",
partie ...
Jusqu'à ce qu'elle soit disponible, on peut convertir l'expression en liste et utiliser l'indexation de liste :
dt = Open("C:/temp/Cars_modified.jmp");
myScript = dt:Model << Get Script;
SubstituteInto(myScript, Expr(New Column()), {});
colorsettings = Associative Array(Try(myScript["Color Cells"],{}));