Il ciclo For non funziona come previstoCiao,
Ho 2 problemi molto sconcertanti.
1) Per il semplice ciclo for riportato di seguito, ho 3 condizioni soddisfatte per un singolo output. Ho verificato osservando manualmente e rappresentando graficamente che tutte e 8 le combinazioni sono effettivamente presenti nei dati. Tuttavia, questo risulta sbilanciato, dove solo x1, x2 e x3 verranno popolati in tutte le celle della colonna X1. Alla voce x2, ad esempio, verrà assegnato il doppio del numero di voci. Dopo un'ulteriore ispezione tramite sottoinsieme, le colonne A1, B1 e C1 sono effettivamente soddisfatte sia per x2 che per x4, che sarebbero in parti uguali. Tutte le colonne condividono lo stesso tipo di dati e di modellazione.
Ho anche bloccato la voce che sta raccogliendo il doppio delle voci, giusto per vedere cosa succederà. Quindi le voci vengono raggruppate, ad esempio, in x2.
For( i = 1, i <= N Rows ( dt ), i++,
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1";
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2";
);
);
2) Se accorcio il codice assegnando valori alla cella con &, ricevo un errore "tentativo di assegnazione a un oggetto che non è un valore L". Questo è un tentativo di abbreviare il mio codice e di non avere più cicli diversi. Di seguito è riportato un esempio di 3 criteri e 3 output.
For( i = 1, i <= N Rows ( dt ), i++,
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2";
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y2" & :Z1[i] = "z1";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y4" & :Z1[i] = "z4";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y1" & :Z1[i] = "z1";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y2" & :Z1[i] = "z4";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y4" & :Z1[i] = "z2";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3";
);
);
Qualsiasi consiglio sarebbe apprezzato. Grazie per il vostro aiuto in anticipo!
Ingegneria della qualità e dei processiRe: Il ciclo For non funziona come previstoMi sono anche assicurato che i nomi delle colonne siano chiamati correttamente nel codice e ho provato sia le virgole che i punti e virgola alla fine di una riga. Ho suddiviso il codice in blocchi più piccoli, separando i possibili valori nella colonna A1 in diversi cicli for, ma ho lo stesso problema.
Re: Il ciclo For non funziona come previstoCiao @Carambola Bob ,
Sei vicino...
La sintassi per un se funzione è If( condizione 1, risultato1, condizione 2, risultato 2, altrimenti risultato ).
Quindi rielaborando la tua affermazione sostituendo il punto e virgola finale con una virgola:
For( i = 1, i <= N Rows ( dt ), i++,
If(
// condition 1 = :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1"
// result 1 = :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2"
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2"
,
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3"
,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y2" & :Z1[i] = "z1"
,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y4" & :Z1[i] = "z4"
,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y1" & :Z1[i] = "z1"
,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y2" & :Z1[i] = "z4"
,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y4" & :Z1[i] = "z2"
,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3"
);
);
HTH.
Saluti,
Stan
Re: Il ciclo For non funziona come previstoCiao Stan,
Grazie per la tua rapida risposta!Questo è qualcosa che ho già sperimentato e invece di popolare x1, x2 e x3, x1, x2 e x4 popoleranno, ad esempio.
Ciò accade anche con più uscite, come le colonne X1 e Y1.
Re: Il ciclo For non funziona come previstoSì, assicurati di utilizzare le virgole come suggerisce Stan. Se Segreti
Modifica: penso che tu voglia
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1" , :X1[i] = "x1" ,
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2" , :X1[i] = "x2" ,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1" , :X1[i] = "x3" ,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2" , :X1[i] = "x4" ,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1" , :X1[i] = "x3" ,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2" , :X1[i] = "x4" ,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1" , :X1[i] = "x1" ,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2" , :X1[i] = "x2" ,
throw("Nothing matched!") // this is the otherwise case
);
Se vuoi davvero più compiti, usa ; piuttosto che &
:X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2" // change this
:X1[i] = "x1"; :Y1[i] = "y1"; :Z1[i] = "z2"; // to this
Anche se potrebbe funzionare con & sarà molto fragile e molto difficile per la prossima persona da risolvere. Come dici tu, il compilatore vede
a=1 & b=2
come
a = ( ( 1 & b ) = 2 )
che produce il messaggio di valore L. Sarebbe bello se il messaggio di errore non fosse il programmatore per parlare Non riesco a memorizzare il valore 2 dal lato destro di = in "1 & b" sul lato sinistro di = perché "1 & b" non è un nome di variabile .
In realtà, il compilatore fa un lavoro ragionevolmente buono per a=1 e b=2:
tentativo di assegnare a un oggetto che non è un valore L nell'accesso o nella valutazione di 'Assign' , 1 & b = /*###*/2 /*###*/
Re: Il ciclo For non funziona come previstoQuesto è stato letteralmente il mio secondo tentativo di tutto questo, e ci sono tornato di nuovo durante il fine settimana e ha funzionato.Non ho una spiegazione sul motivo per cui non ha funzionato la prima volta che l'ho provato in questo modo.Grazie per la vostra risposta!