Problème avec la mise en forme conditionnelle (couleur) utilisant « pour chaque ligne » et la boucle « for » imbriquéeBonjour,
Je suis à la fin d'un script où j'ai résumé un tas de données dans différentes colonnes (numériques et caractères).
La boucle pour formater des cellules numériques répondant à certains critères est assez facile, mais j'ai un problème pour attribuer une couleur aux colonnes de caractères qui contiennent une certaine sous-chaîne.
Par exemple, une cellule (avec le contenu suivant : 1,1,2,1,1,2,3,3) doit être colorée en rouge car elle contient à 1 occurrence du caractère « 3 ».
Si je spécifie tout le contenu de la cellule, pas de problème mais j'essaie de rechercher '3' et de colorer en conséquence -> échoue.
J'ai ajouté les scripts ci-dessous.
Toute suggestion serait appréciée.
Meilleur,
Sébastien
Names Default To Here( 1 );
clear log();
dt = New Table( "test",
Add Rows( 8 ),
New Column( "unique_group_id",
Character,
"Nominal",
Set Values(
{"ELN-19-0588-A", "ELN-19-0588-B", "ELN-19-0588-C", "ELN-19-0588-D",
"ELN-19-0588-E", "ELN-19-0588-F", "ELN-19-0588-G", "ELN-19-0588-H"}
),
Set Display Width( 115 )
),
New Column( "FOB max",
Character,
"Nominal",
Set Selected,
Set Values(
{"0,0,0,0,0,0,0,0,0,0", "0,0,0,0,0,0,0,0", "0,0,0,0,0,0,0,0",
"0,0,3,0,0,1,0,2", "1,1,2,1,1,2,3,3", "0,0,0,0,0,0,0,0",
"4,2,2,3,2,3,3,4", "1,0,0,1,1,1,1,1"}
)
),
New Column( "glib1 % PBS - potatoe",
Numeric,
"Ordinal",
Format( "Best", 12 ),
Set Selected,
Set Values( [100, 113.39, 108.3, 156.38, 822.21, 768.51, 487.2, 222.56] )
),
New Column( "calb (IHC) cere",
Character,
"Nominal",
Set Values(
{"0,0,0,0,0,0,0,0,0,0", "0,0,0,0,0,0,0,0", "0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0", "3,4,3,4,3,3,3,4", "3,3,3,5,2,3,3,3",
"0,0,0,0,0,0,0,0", "0,0,0,0,0,0,1,0"}
)
)
);
wait(2);
col=dt <<GET column="" names="">200,
column(col[i]) << color cells( "Light Red", Row())
)
)));
//Does not work - it needs to be an exact match
c="FOB";
b={"3"};//trying to look for cells in columns labelled with FOB whihc contains the character '3'
For(i=1,i<=nc,i++, if( Contains( col[i], c ),
for each row(
If( contains(b,as column(col[i])),
column(col[i])<< color cells( "Light Red", Row())
)
)));
wait (2);
//Works when specifying exactly the content of the cell(s) to match
c="FOB";
b={"1,1,2,1,1,2,3,3"};
For(i=1,i<=nc,i++, if( Contains( col[i], c ),
for each row(
If( contains(b,as column(col[i])),
column(col[i])<< color cells( "Red", Row())
)
)));
</GET>Tableau de donnéesScriptRe: Problème avec la mise en forme conditionnelle (couleur) utilisant 'pour chaque ligne' et la boucle 'for' imbriquéeVous spécifiiez votre fonction Contains() à l'envers et vous faisiez vos comparaisons avec les listes JMP.Réparez-les et cela fonctionne bien.

Names Default To Here( 1 );
clear log();
dt = New Table( "test",
Add Rows( 8 ),
New Column( "unique_group_id",
Character,
"Nominal",
Set Values(
{"ELN-19-0588-A", "ELN-19-0588-B", "ELN-19-0588-C", "ELN-19-0588-D",
"ELN-19-0588-E", "ELN-19-0588-F", "ELN-19-0588-G", "ELN-19-0588-H"}
),
Set Display Width( 115 )
),
New Column( "FOB max",
Character,
"Nominal",
Set Selected,
Set Values(
{"0,0,0,0,0,0,0,0,0,0", "0,0,0,0,0,0,0,0", "0,0,0,0,0,0,0,0",
"0,0,3,0,0,1,0,2", "1,1,2,1,1,2,3,3", "0,0,0,0,0,0,0,0",
"4,2,2,3,2,3,3,4", "1,0,0,1,1,1,1,1"}
)
),
New Column( "glib1 % PBS - potatoe",
Numeric,
"Ordinal",
Format( "Best", 12 ),
Set Selected,
Set Values( [100, 113.39, 108.3, 156.38, 822.21, 768.51, 487.2, 222.56] )
),
New Column( "calb (IHC) cere",
Character,
"Nominal",
Set Values(
{"0,0,0,0,0,0,0,0,0,0", "0,0,0,0,0,0,0,0", "0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0", "3,4,3,4,3,3,3,4", "3,3,3,5,2,3,3,3",
"0,0,0,0,0,0,0,0", "0,0,0,0,0,0,1,0"}
)
)
);
wait(2);
col=dt <<GET column="" names="">200,
column(col[i]) << color cells( "Light Red", Row())
)
)));
//Does not work - it needs to be an exact match
c = "FOB";
b = "3";//trying to look for cells in columns labelled with FOB whihc contains the character '3'
For( i = 1, i <= nc, i++,
If( Contains( col[i], c ),
For Each Row(
If( Contains( As Column( col[i] ), b ),
Column( col[i] ) << color cells( "Light Red", Row() )
);
)
)
);
wait (2);
//Works when specifying exactly the content of the cell(s) to match
c = "FOB";
b = "1,1,2,1,1,2,3,3";
For( i = 1, i <= nc, i++,
If( Contains( col[i], c ),
For Each Row(
If( Contains( As Column( col[i] ), b ),
Column( col[i] ) << color cells( "Red", Row() )
)
)
)
);</GET>
Re: Problème avec la mise en forme conditionnelle (couleur) utilisant 'pour chaque ligne' et la boucle 'for' imbriquéeSalut,
Modifiez votre code pour qu'il corresponde à la ligne 67 du code ci-dessous.
Contient ( ) vous permet de faire deux ou trois choses différentes, selon les arguments que vous fournissez. Par example:
Contient ( {"cat", "dog", "mouse", "dog", "horse"}, "dog" ) renvoie 2, car la première occurrence de "dog" dans la liste fournie est à la position 2.
Contient ( {"bovin", "chien", "souris"}, "chat") renvoie 0, car "chat" n'apparaît pas dans la liste. Si nous voulons rechercher élément par élément dans la liste pour voir si "cat" est une sous-chaîne d'un élément, nous devons parcourir la liste.
Votre code d'origine ressemble un peu à ce dernier exemple : contains (b, :col) vérifie si la valeur de la cellule de la colonne correspond à un élément de b, que vous avez défini comme {"3"}. Aucune correspondance n'est trouvée.
Inversement, le nouveau code, Contains(:col, b[1]), vérifie si b[1], le premier élément de la liste b, qui est "3", est contenu dans la valeur de la cellule de la colonne. Utilisée de cette façon, la fonction Contains (<>, <>) recherche la sous-chaîne <> dans la chaîne <> - ce que je pense que vous voulez.
Acclamations,
Brady
Contient ( {"chat", "chien", "souris"}, "chat") renvoie
