Bonjour les experts JMP,
D'une manière ou d'une autre, je pense que mon message vient d'être supprimé, publie-le à nouveau
J'ai une table DOE avec de nombreuses formules prédites, ces formules ont une relation entre les axes X et Y
Je voudrais réorganiser le tableau de données dans le format ci-dessous afin de pouvoir dessiner un tracé de surface (X, Y, valeur) pour voir comment il change lorsque je change de paramètre.

Deux problèmes :
1. Je peux obtenir des formules puis les concaténer au format ci-dessous if (row == 1, formule 1, if( row == 2, formula 2, ......etc)
Mais finalement, la formule est un long caractère avec "", je dois supprimer manuellement "' pour que la formule fonctionne
2. J'utilise la zone de liste H pour obtenir la valeur et définir chaque ligne pour modifier les paramètres, afin de pouvoir voir comment le tracé de surface change. Mais idéalement, j'aimerais utiliser la barre de défilement pour modifier le paramètre afin de pouvoir voir les changements plus facilement.
dt = data table("example DOE table");
dt2 = current data table();
colname = dt << get column names();
colnamelist = {};
formulalist = {};
loopword = char("If( Row() == ");
mid = char("");
final = char("");
//Get column names with predicted formula
for (i = 1, i <= N items(colname),i++,
pos = Contains (colname[i], "Pred F");
if(pos == 1 , insert into(colnamelist, colname[i]), continue())
);
//Get formula from columns and save into list
for each({colval}, colnamelist,
eval(evalexpr(
formula = Char(Expr(Name Expr(As Column(dt,colval))) << get formula());
));
insert into (formulalist, formula)
);
//Concat formulas to below format: If( row == 1, Formula 1, If( row ==2, Forumla 2, If( row == 3, formula 3)))......etc
for (i=1, i <= N rows() , i++,
mid = mid || loopword || char(i) || ", " || char(formulalist[i]) || ", "
);
final = mid || char("0");
for (i=1, i <= N rows() , i++,
final = final || char(")")
);
eval(evalexpr(
:height << set formula(expr(final))
));
nw = New Window( "process paramaeter setting",
H List Box( Text Box( " Input Parameter A " ), A = Number Edit Box() ),
H List Box( Text Box( " Input Parameter B " ), B = Number Edit Box() ),
H List Box( Text Box( " Input Parameter C " ), C = Number Edit Box() ),
H List Box( Text Box( " Input Parameter D " ), D = Number Edit Box() ),
Button Box( "OK",
theA = A << get;
theB = B << get;
theC = C << get;
theD = D << get;
:Parameter A << set each value(theA);
:Parameter B << set each value(theB);
:Parameter C << set each value(theC);
:Parameter D << set each value(theD);
//Somehow the column with formula cannot draw into surface plot directly, so I have to copy and paste value to anohter column to draw
newheight = :height << get values;
:newheight<< set values(newheight);
)
)
Il semble que vous deviez utiliser des zones de curseur pour votre saisie, plutôt que des zones d'édition de nombres.
Merci Jim, une boîte coulissante est ce que je recherche.
Mais encore une chose, je crée une zone de bouton pour obtenir la valeur de la zone de curseur, puis je définis chaque valeur pour changer de ligne, est-il possible de faire changer la ligne en temps réel en tant que curseur, sans bouton de vérification supplémentaire ?
Value = 0;
New Window( "Example",
Panel Box( "Parameter setting",
tb = Text Box( "Parameter A: " || Char( Value ) ),
sb = Slider Box( 0, 1, Value, tb << Set Text( "Value: " || Char( Value ) ) ),
Button Box( "OK",
:Parameter A << set each value(Value)
)
)
);
Je l'ai trouvé, un simple parse() peut faire l'affaire pour ma première question
seval(evalexpr(
:height << set formula(expr(parse(final)))
));
Mais pour la deuxième question, ce serait vraiment bien si nous pouvions avoir une barre de défilement pour définir chaque valeur afin que l'utilisateur puisse facilement voir comment la carte 3D change à mesure que le paramètre change,
recherchez dans l'index des scripts Slider Box() et vous verrez :
Syntaxe : box = Slider Box (valeur min, valeur max, variable, SCRIPT , ,
Vous pouvez prendre le JSL de votre bouton OK et le placer dans la définition de Slider Box(). Il sera exécuté à chaque fois que le curseur sera déplacé.
Cela a parfaitement résolu mon problème, merci Jim pour votre soutien