Problema con la formattazione condizionale (colore) utilizzando "per ogni riga" e il ciclo "for" annidatoCiao,
Sono alla fine di uno script in cui ho riassunto una serie di dati in varie colonne (sia numeriche che caratteriali).
Il ciclo per formattare le celle numeriche che soddisfano determinati criteri è abbastanza semplice, ma ho qualche problema nell'assegnare un colore per le colonne di caratteri che contengono una determinata sottostringa.
Ad esempio, una cella (con il seguente contenuto:1,1,2,1,1,2,3,3) dovrebbe essere colorata di rosso perché contiene in 1 occorrenza del carattere '3'.
Se specifico l'intero contenuto della cella, nessun problema, ma provo a cercare "3" e colore di conseguenza -> fallisce.
Ho aggiunto gli script di seguito.
Tutti i suggerimenti sarebbero apprezzati.
Migliore,
Sebastian
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>Tabella datiScriptingRe: Problema con la formattazione condizionale (colore) utilizzando "per ogni riga" e il ciclo "for" annidatoStavi specificando la tua funzione Contiene() al contrario e stavi facendo i tuoi confronti nelle liste JMP.Risolvi quelli e funziona bene.

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: Problema con la formattazione condizionale (colore) utilizzando "per ogni riga" e il ciclo "for" annidatoCiao,
Cambia il tuo codice in modo che corrisponda alla riga 67 nel codice sottostante.
Contiene ( ) ti permette di fare un paio di cose diverse, a seconda degli argomenti che fornisci. Per esempio:
Contiene ( {"gatto", "cane", "topo", "cane", "cavallo"}, "cane" ) restituisce 2, perché la prima occorrenza di "cane" nell'elenco fornito è nella posizione 2.
Contiene ( {"bestiame", "cane", "topo"}, "gatto") restituisce 0, poiché "gatto" non compare nell'elenco. Se vogliamo cercare l'elenco elemento per elemento per vedere se "cat" è una sottostringa di qualsiasi elemento, dobbiamo scorrere l'elenco.
Il tuo codice originale è un po' come questo ultimo esempio: Contiene (b, :col) controlla se il valore della cella della colonna corrisponde a qualsiasi elemento in b, che hai definito come {"3"}. Nessuna corrispondenza trovata.
Al contrario, il nuovo codice, Contiene(:col, b[1]), verifica se b[1], il primo elemento della lista b, che è "3", è contenuto nel valore della cella della colonna. Usata in questo modo, la funzione Contiene (<>, <>) cerca la sottostringa <> all'interno della stringa <>--che è quello che credo tu voglia.
Saluti,
Brady
Contiene ( {"gatto", "cane", "topo"}, "gatto") restituisce
