Ri: Utilizzare la variabile del ciclo for in una formulaUn paio di problemi
IL
Column[ l ]
la sintassi specificata è errata.La colonna è una funzione (), non una matrice [] pertanto deve essere specificata come
Column( l )
Successivamente, la formula avrà un problema con il valore che stai assegnando.Data la tua formula, ci sono casi in cui non verrà assegnato alcun valore.Poiché una formula JMP restituisce l'ultimo valore assegnato, è necessario assegnare esplicitamente un valore alla formula per ogni caso.Nella mia versione della tua formula, sto usando una variabile X a cui assegnare la tua logica.Inizializzo il valore su un valore mancante, quindi X viene assegnato dalla logica If().Quindi assicuro che il valore calcolato di X sia l'ultimo valore elaborato, semplicemente sommando
x;
come ultima affermazione nella formula.
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;
)
);
)
Infine, quando inserisci JSL in una domanda di discussione, utilizza il file
icona in modo che JSL sia più facile da leggere da parte dei membri della comunità
Utilizzare per la variabile di ciclo in una formulaProvando con questo script ma la variabile "l" non funziona, funziona solo la variabile "k". Comunque per risolvere questo?
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,
),
)
)
);
)Automazione e scriptingRi: Utilizzare la variabile del ciclo for in una formulaOk certo certo, utilizzerò l'icona per la prossima volta. Comunque lo script non funziona. Forse dovrei approfondire quali sono i problemi che ho dovuto affrontare
Ho una colonna con un numero binario a 8 bit, ad esempio x="00101101"
Quindi quando la mia variabile k è diversa, il bit letto dalla colonna x dovrebbe essere diverso
\\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,
),
)
)
);
)Il problema che ho riscontrato è che jmp non riesce a riconoscere qual è il bit che voglio leggere, non importa se ho inserito Column(l), l nel ciclo for
Ri: Utilizzare la variabile del ciclo for in una formulaSarebbe utile se potessi allegare una tabella dati di esempio.
Con la tua ulteriore spiegazione, prova a cambiare
If( Right( :"x"n, Column(l) ) ) == "1"
A
If( Right( :"x"n, as Column( "Column" || char(l) )== "1"
Ri: Utilizzare la variabile del ciclo for in una formulaCiao Jim, ecco la tabella dei dati, inserisco ciò che mi aspetto di vedere nella tabella dei dati. I dati della colonna descrivono qual è il valore "l" e da quale valore di "x" proviene
Ri: Utilizzare la variabile del ciclo for in una formulaGrazie Jim, penso che funzioni ma la stampa sarà leggermente non corrispondente. Funziona bene quando si aggiunge ",1" dietro "_l_" nella formula. Ho allegato il mio script jsl completo qui
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
)
);
);Ri: Utilizzare la variabile del ciclo for in una formulaHai ragione, questo è il mio errore.Correggerò la mia voce.
Ri: Utilizzare la variabile del ciclo for in una formulaLo script seguente sembra funzionare.Lo script fornito ha utilizzato \\ come iniziatori di commenti, dove // è la sintassi corretta.
La vera formula di lavoro si riduceva in realtà all'uso della funzione Substr().
L'aggiunta della sezione Eval(Substitute(Expr())) ha semplicemente cambiato il valore della variabile l nel valore effettivo di l, anziché avere il valore referenziato attraverso la variabile.
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
)
);
);