Re : Utiliser la variable de boucle for dans une formuleQuelques problèmes
Le
Column[ l ]
la syntaxe que vous avez spécifiée est incorrecte.La colonne est une fonction (), pas une matrice [], elle doit donc être spécifiée comme
Column( l )
Ensuite, la formule aura un problème avec la valeur que vous attribuez.Compte tenu de votre formule, il existe des cas où aucune valeur ne sera attribuée.Étant donné qu'une formule JMP renvoie la dernière valeur attribuée, vous devez attribuer explicitement une valeur à la formule pour chaque cas.Dans ma version de votre formule, j'utilise une variable X à laquelle attribuer votre logique.J'initialise la valeur à une valeur manquante, puis X est attribué par votre logique If().J'assure alors que la valeur calculée de X est la dernière valeur traitée, en ajoutant simplement
x;
comme dernière instruction de la formule.
For( k = 40, k <= 54, k += 2,
x1 = 1;
x2 = 8;
y1 = 40;
y2 = 54;
m = (y2 - y1) / (x2 - x1);
c = y2 - (m * x1);
l = (k - c) / m;
dt << New Column( "Test" || Char( k ),
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
x = .;
If( :Strobe == 1,
If(
:Tested Variable == 0 | :Tested Plane == 1,
If( Left( Right( :"x"n, Column(l) ) ),
1
) == "1",
x = 1,
Left( Right( :"x"n, (l) ), 1 ) == "0",
x = 0,
),
);
x;
)
);
)
Enfin, lorsque vous saisissez du JSL dans une question de discussion, veuillez utiliser le
icône pour que le JSL soit plus facile à lire par les membres de la communauté
Utiliser la variable de boucle for dans une formuleJ'essaie avec ce script mais la variable "l" ne fonctionne pas, seule la variable "k" fonctionne. Quoi qu'il en soit pour résoudre ça ?
For( k = 40, k <= 54, k += 2,
x1 = 1;
x2 = 8;
y1 = 40;
y2 = 54;
m = (y2 - y1) / (x2 - x1);
c = y2 - (m * x1);
l = (k - c) / m;
dt << New Column( "Test" || Char( k ),
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :Strobe == 1,
If(
:Tested Variable == 0 | :Tested Plane == 1,
If( Left( Right( :"x"n, Column[l] ) ), 1 ) == "1",
1, Left( Right( :"x"n, (l) ), 1 ) == "0",
0,
),
)
)
);
)Automatisation et scriptsRe : Utiliser la variable de boucle for dans une formuleOk, bien sûr, j'utiliserai l'icône pour la prochaine fois. Au fait, le script ne fonctionne pas. Peut-être devrais-je préciser davantage quels sont les problèmes auxquels j'ai été confronté
J'ai une colonne avec un nombre binaire de 8 bits, par exemple x="00101101"
Ensuite, lorsque ma variable k est différente, le bit lu dans la colonne x devrait être différent
\\k start 40, For each loop will add 2
For( k = 40, k <= 54, k += 2,
x1 = 1;
x2 = 8;
y1 = 40;
y2 = 54;
m = (y2 - y1) / (x2 - x1);
c = y2 - (m * x2);
l = (k - c) / m;
\\l is calculated based on k\
\\Tested variable & Column x & Strobe are the column in my data set
\\If k=40, then the readout will be 1st bit from the right of column x;
\\If k=40, then the readout will be 8th bit from the right of column x;
dt << New Column( "Test" || Char( k ),
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :Strobe == 1,
If(
:Tested Variable == 0 | :Tested Variable == 1,
If( Right( :"x"n, Column(l) ) ) == "1",
1, Right( :"x"n, (l) )== "0",
0,
),
)
)
);
)Le problème auquel j'ai été confronté est que jmp ne peut pas reconnaître quel est le bit que je veux lire, même si je mets Column(l), l dans la boucle for.
Re : Utiliser la variable de boucle for dans une formuleIl serait utile de joindre un exemple de tableau de données.
Avec votre explication supplémentaire, essayez de changer
If( Right( :"x"n, Column(l) ) ) == "1"
à
If( Right( :"x"n, as Column( "Column" || char(l) )== "1"
Re : Utiliser la variable de boucle for dans une formuleSalut Jim, voici le tableau de données, j'ai mis ce que j'attends de voir dans le tableau de données. Les données en colonne décrivent quelle est la valeur "l" et de quelle valeur de "x" elle provient
Re : Utiliser la variable de boucle for dans une formuleMerci Jim, je pense que cela fonctionne mais l'impression sera légèrement différente. Cela fonctionne bien en ajoutant ",1" derrière "_l_" dans la formule. J'ai joint mon script jsl complet ici
Names Default To Here( 1 );
dt = Current Data Table();
//k start 40, For each loop will add 2
For( k = 40, k <= 54, k += 2,
x1 = 1;
x2 = 8;
y1 = 40;
y2 = 54;
m = (y2 - y1) / (x2 - x1);
c = y2 - (m * x2);
l = (k - c) / m;
//l is calculated based on k\
//Tested variable & Column x & Strobe are the column in my data set
//If k = 40;, then the readout will be 1st bit from the right of column x;
//If k = 40;,then the readout will be 8th bit from the right of column x;
// The variable l needs to be fully parsed in the formula, so that if the
// value of l changes, it does not change previous formulas
Eval(
Substitute(
Expr(
dt << New Column( "Test" || Char( k ),
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
theVal = .;
If( :Strobe == 1,
If( :Tested Variable == 0 | :Tested Variable == 1,
theVal = Num( Substr( :x, _l_ ,1) )
)
);
theVal;
)
)
),
Expr( _l_ ), l
)
);
);Re : Utiliser la variable de boucle for dans une formuleVous avez raison, c'est mon erreur.Je vais corriger mon entrée.
Re : Utiliser la variable de boucle for dans une formuleLe script ci-dessous semble fonctionner.Votre script fourni utilise \\ comme initiateurs de commentaires, où // correspond à la syntaxe correcte.
La vraie formule de travail se résumait en réalité à l’utilisation de la fonction Substr().
L'ajout de la section Eval(Substitute(Expr())) vient de changer la valeur de votre variable l en la valeur réelle de l, plutôt que d'avoir la valeur référencée via la variable.
Names Default To Here( 1 );
dt = Current Data Table();
//k start 40, For each loop will add 2
For( k = 40, k <= 54, k += 2,
x1 = 1;
x2 = 8;
y1 = 40;
y2 = 54;
m = (y2 - y1) / (x2 - x1);
c = y2 - (m * x2);
l = (k - c) / m;
//l is calculated based on k\
//Tested variable & Column x & Strobe are the column in my data set
//If k = 40;, then the readout will be 1st bit from the right of column x;
//If k = 40;,then the readout will be 8th bit from the right of column x;
// The variable l needs to be fully parsed in the formula, so that if the
// value of l changes, it does not change previous formulas
Eval(
Substitute(
Expr(
dt << New Column( "Test" || Char( k ),
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
theVal = .;
If( :Strobe == 1,
If( :Tested Variable == 0 | :Tested Variable == 1,
theVal = Num( Substr( :x, _l_ , 1 ) )
)
);
theVal;
)
)
),
Expr( _l_ ), l
)
);
);