La boucle For ne fonctionne pas comme prévuBonjour,
J'ai 2 problèmes très déroutants.
1 ) Pour la boucle for simple ci-dessous, j'ai 3 conditions remplies pour une seule sortie. J'ai vérifié en regardant manuellement et en représentant graphiquement que les 8 combinaisons sont bien présentes dans les données. Cependant, cela semble déséquilibré, où seuls x1, x2 et x3 apparaîtront dans toutes les cellules de la colonne X1. L'entrée x2, par exemple, aura le double du nombre d'entrées qui lui sont attribuées. Après une inspection plus approfondie via le sous-ensemble, les colonnes A1, B1 et C1 sont effectivement remplies pour x2 et x4, qui seraient en parts égales. Toutes les colonnes partagent le même type de données et de modélisation.
J'ai également bloqué l'entrée qui rassemble le double des entrées, juste pour voir ce qui va se passer. Ensuite, les entrées sont regroupées en x2, par exemple.
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) Si je raccourcis le code en attribuant des valeurs à la cellule avec &, j'obtiens une erreur "tentative d'attribution à un objet qui n'est pas une valeur L". Ceci est une tentative de raccourcir mon code et de ne pas avoir plusieurs boucles différentes. Vous trouverez ci-dessous un exemple de 3 critères et 3 résultats.
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";
);
);
Toute orientation serait appréciée. Merci pour votre aide en avance !
Ingénierie Qualité et ProcédésRe : La boucle For ne fonctionne pas comme prévuJe me suis également assuré que les noms de colonne sont appelés correctement dans le code et j'ai essayé les virgules et les points-virgules à la fin d'une ligne. J'ai divisé le code en plus petits morceaux, séparant les valeurs possibles de la colonne A1 en différentes boucles for, mais j'ai le même problème.
Re : La boucle For ne fonctionne pas comme prévuSalut @StarfruitBob ,
Tu es proche...
La syntaxe d'un si fonction est If( condition 1, result1, condition 2, result 2, else result ).
Retravaillez donc votre déclaration en remplaçant le point-virgule final par une virgule :
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.
à votre santé,
Stan
Re : La boucle For ne fonctionne pas comme prévuBonjour Stan,
Merci pour votre réponse rapide !C'est quelque chose que j'ai déjà expérimenté et au lieu de remplir x1, x2 et x3, x1, x2 et x4 rempliront, par exemple.
Cela se produit également avec plusieurs sorties, telles que les colonnes X1 et Y1.
Re : La boucle For ne fonctionne pas comme prévuOui, assurez-vous d'utiliser les virgules comme le suggère Stan. Si secrets
Edit : je pense que tu veux
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
);
Si vous voulez vraiment plusieurs affectations, utilisez ; plutôt que &
:X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2" // change this
:X1[i] = "x1"; :Y1[i] = "y1"; :Z1[i] = "z2"; // to this
Bien que cela puisse fonctionner avec & il sera très fragile et très difficile à résoudre pour la prochaine personne. Comme vous le dites, le compilateur voit
a=1 & b=2
comme
a = ( ( 1 & b ) = 2 )
qui produit le message L-value. Ce serait bien si le message d'erreur n'était pas le nom du programmeur Je ne peux pas stocker la valeur 2 du côté droit du = dans "1 & b" sur le côté gauche du = car "1 & b" n'est pas un nom de variable .
En fait, le compilateur fait un assez bon travail pour a=1 & b=2 :
tentative d'assignation à un objet qui n'est pas une valeur L dans l'accès ou l'évaluation de 'Assign' , 1 & b = /*###*/2 /*###*/
Re : La boucle For ne fonctionne pas comme prévuC'était littéralement ma deuxième tentative dans tout cela, et j'y suis revenu ce week-end et cela a fonctionné.Je n'ai pas d'explication quant à la raison pour laquelle cela n'a pas fonctionné la première fois que j'ai essayé comme ça.Merci pour votre réponse!