La mise à jour de la zone de liste de colonnes à l'aide de la liste stockée dans la variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?J'essaie de corriger les "péchés" précédents dans un script que j'ai écrit en le mettant à jour avec des références unanimes, c'est-à-dire de sorte que le script fasse référence à la table à laquelle je (veux) le dire, même si une autre table peut être la table actuelle ( ou une table "interférente"). J'ai essayé de reconstituer le problème ci-dessous.
Names Default To Here( 1 );
// this is the table i want to work with
dt = New Table( "Target table", invisible,
Add Rows( 3 ),
New Column( "Name_1",
Character( 1 ),
"Nominal",
Set Values( {"A", "B", "C"} ),
Set Display Width( 45 )
),
New Column( "Name_2",
Character( 1 ),
"Nominal",
Set Values( {"X", "Y", "Z"} ),
Set Display Width( 45 )
),
New Column( "NumericRight",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3] ),
Set Display Width( 78 )
),
New Column( "NumericAlso",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 8, 9] )
)
);
dt2 = New Table( "Interfering table", invisible,
Add Rows( 3 ),
New Column( "Name_1",
Character( 1 ),
"Nominal",
Set Values( {"D", "E", "F"} ),
Set Display Width( 45 )
),
New Column( "Name_2",
Character( 1 ),
"Nominal",
Set Values( {"U", "V", "W"} ),
Set Display Width( 45 )
),
New Column( "NumericInterference",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4, 5, 6] )
),
New Column( "MoreNumeric",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 8, 9] )
)
);
// get lists
lstName_1 = Associative Array( dt:Name_1 ) << Get Keys;
lstName_2 = Associative Array( dt:Name_2 ) << Get Keys;
colList = dt << Get Column Names( "Numeric" );
// window with radio buttons & col list box
New Window( "Select values",
Show Menu( 0 ),
Show Toolbars( 0 ),
Border Box( Top( 0 ), Bottom( 20 ), Left( 20 ), Right( 10 ),
H List Box(
Panel Box( "Name_1",
Radio Box(
Eval List( lstName_1 )
)
),
Panel Box( "Name_2",
Radio Box(
Eval List( lstName_2 )
)
),
Panel Box( "Numeric Columns",
clb = Col List Box( )
),
clb << Append( colList ); // making me cry ...
)
)
);
Ce que je veux voir :

Ce que je vois invariablement si ma "table cible" n'est pas la table actuelle :

Ce qui me rend complètement confus, c'est que lorsque je change le nom de dt2 : interférence numérique à dt2 : NumériqueDroit , j'obtiens ce résultat :

Pourquoi dt2 ne laisse-t-il pas mon script faire le travail que je souhaite ? Pourquoi le changement de nom d'une colonne dans dt2 affecte-t-il ce qui entre dans la zone de liste des colonnes ? J'ai essayé quelques variantes pour déplacer le colListe variable et j'ai également essayé de l'envelopper dans Liste d'évaluation() , sans "chance".
En cherchant à nouveau dans la communauté, j'ai trouvé ceci Besoin d'aide pour remplir la zone de liste Col. S'il y a une autre solution, merci de me le faire savoir. Alternativement, est-ce ainsi que cela est censé être, et si oui, quelle en est la signification ?
Automatisation et scriptsRe : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?Salut,
À première vue, il vous suffit d'utiliser la syntaxe ci-dessous pour obtenir la liste des colonnes numériques du tableau dt :
clb = Col List Box(dt, all, << Set Data Type ("numeric"))
De plus, il n'est pas clair comment la ligne : "clb << append (collist)" pourrait fonctionner puisque Get Column Names renvoie une liste de noms et non de colonnes.
Enfin, je ne pense pas que vous puissiez utiliser la Col List Box sur plusieurs tables (corrigez-moi si je me trompe ici).
Meilleur,
TS
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?Il semble que la zone de liste col accepte simplement les colonnes de la table de données qui était « actuelle » lorsque la zone de liste col a été créée.
Si dt2 ne contient pas la colonne correspondante, elle ne peut pas être ajoutée.
Je suppose
current data table(dt);
// window with radio buttons & col list box
New Window( "Select values",
n'y a-t-il pas d'option pour vous ?
Sinon, utilisez
clb = Col List Box( Data Table(dt) )
pour spécifier quelle table de données doit être utilisée pour la zone de liste col :

Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?Merci @Thierry_S , je vais essayer ça demain. Cependant, si dt2 est commenté en dehors du script, la Col List Box est mise à jour comme prévu, donc cela fonctionne définitivement (voir aussi la première capture d'écran dans ma publication originale).
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?@hogi , merci, je vais aussi essayer ça demain et je vous ferai part du résultat.
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?@Thierry_S , bizarrement et malheureusement, cela ne fonctionne pas. Dans le script que j'ai initialement publié, j'ai apporté les modifications suivantes conformément à votre proposition :
// this part was revised ...
Panel Box( "Numeric Columns",
clb = Col List Box( )
),
clb << Append( colList ); // making me cry ...
// ... to look like this.
Panel Box( "Numeric Columns",
clb = Col List Box( dt, all, << Set Data Type ( "numeric" ) ) // this adds the numeric columns from dt2. Why???
)
Cela a donné le résultat ci-dessous, c'est-à-dire que les colonnes numériques de dt2 ont été ajoutées à la zone de liste de colonnes, alors que ce que je veux, ce sont les colonnes numériques de dt.

Pourtant, un apprentissage très utile pour moi. Merci!
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?
@Ressel a écrit:
@Thierry_S , bizarrement et malheureusement, cela ne fonctionne pas.</CODE></P><HR /></BLOCKQUOTE><P> </P><P>Le code est presque correct, mais il faut utiliser</P><PRE><CODE class=" language-jsl">clb = Col List Box(Data Table(dt), all, << Set Data Type ("numeric"))
vous pouvez aussi utiliser
clb = Col List Box(all, << Set Data Type ("numeric"), Data Table(dt))mais il ne faut pas oublier "l'indicateur" *) Data Table().
Comme indiqué dans mon article précédent (ci-dessous), selon le guide de script, il doit être

Comme pour les noms de colonnes, peu importe si vous utilisez le nom ou la référence.
Mais il doit s'agir d'une table de données (nom ou référence de table) et pas seulement d'un argument sans indicateur.
C'est un peu trompeur, car souvent Data Table(name) peut être remplacé par une référence de table de données 
Mais ici, le Data Table est un argument facultatif - et donc, il doit y avoir un indicateur *) tel que Jmp sache de quoi il s'agit.
*) Quel est le nom officiel de « indicateur » ?
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?@hogi , Je suis ébahi! Merci pour votre aide.
- Faire de la table souhaitée la table actuelle fonctionne, bien sûr. D'une manière ou d'une autre, je voulais toujours éviter cela.
- Mais le code ci-dessous fonctionne également
Panel Box( "Numeric Columns",
clb = Col List Box(Data Table( dt ))
),
clb << Append( colList ); // this is still required, which I find interesting, since I thought the clb was already added above via Col List Box(...)
En revanche, ce qui suit ne fonctionne pas. Au lieu de cela, il ajoute les colonnes numériques de dt2, ce qui n'a aucun sens pour moi.
Panel Box( "Numeric Columns",
clb = Col List Box(dt, all, << Set Data Type ( "numeric" )) // adds numeric columns from dt2 :(...
),
/*clb << Append( colList );*/ // doesn't matter whether this is commented out or not
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?Salut @Ressel .
Je dois admettre que cela m'a aussi un peu intrigué 
Ils auraient dû utiliser
Col List Box(<FROM data="https://community.jmp.com/" table=""></FROM>
comme argument facultatif ... ou quoi que ce soit d'autre - mais différent de Table de données("nom de la table")
- un peu trompeur, non ?
Après des années en tant qu'utilisateur de Jmp, on est trop tenté de remplacer l'expression entière par dt - et ainsi oublier "l'indicateur".
D'un autre côté, c'est bien que l'on puisse utiliser la référence de la table au lieu du nom de la table comme argument de Data Table 
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?La présence et l'aide d'utilisateurs comme vous sont ce qui permet à de nombreuses personnes, moi y compris, de progresser en matière de scripts et d'autres compétences liées à JMP. C'est de la gentillesse et c'est grandement apprécié.
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?@Thierry_S , @hogi pour votre information - https://www.pega-analytics.co.uk/blog/handling-lists-of-columns/
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?Merci pour le lien, @David_Burnham le blog contient une belle collection de pierres précieuses !
Je viens de lire la partie sur les références de colonnes dans la plateforme de distribution.
Intéressant - selon l'index de script, c'est :

Comme il n'y a pas de " < >" autour de l’argument Column(), on pourrait penser que Colonne() est le seul argument non facultatif
- utilise-t-il le Colonne() fonction pour générer une référence de colonne ?
Mais en réalité, c'est la même chose que Tableau de données() dans la discussion précédente :
Colonne() est un indicateur pour un facultatif argument:
- il peut être placé partout et peut être omis
- il accepte une colonne ou une liste de >=1 colonnes (comme référence ou nom) - signe clair qu'il ne s'agit PAS de la fonction column()
J'ai trouvé une autre entrée dans l'index des scripts où les points avant et après l'argument Columns() indiquent que l'argument est facultatif.
Ici, c'est Colonnes [pluriel] - comme dans l'interface graphique. Oui est un autre pseudonyme. Les deux aident à ne pas se laisser distraire par la fonction Colonne() .

// aliasDistribution(Column("height"));
Distribution(:height); // doesn't work<BR /><BR />Distribution(Columns("name", :sex)); // accepts >=1 arguments; column references and names<BR />Distribution(Columns({"name", :sex})); // accepts lists
<BR />Distribution(Continuous Distribution(Column( :height ))); // Distribution can be used without a Column() argument<BR />
Distribution("dummy 1st entry", Columns("height")); // Column at non-first position -> works<BR /><BR />Distribution("hello"); // not necessary to provide a meaningful (first) argument<BR /><BR />Distribution(Columns("name")); // alias<BR />Distribution(Y("name"));
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?Le Guide de script fournit des explications sur la terminologie Guide de script > Introduction à l'écriture de scripts JSL > Terminologie JSL
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?
La terminologie est donc nommé arguments
- et les arguments nommés sont toujours facultatifs - avec et sans < > dans l'index des scripts 
Malheureusement, ce n'est pas explicitement noté :
alors le nom officiel de "l'indicateur" d'un argument nommé est " nom " ?
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?Nom officiel? Indicateur?
Guide de script > Blocs de construction JSL > Règles de syntaxe JSL > Règles JSL pour les noms
En JSL, un nom est simplement quelque chose pour appeler un élément. Lorsque vous attribuez la valeur numérique 3 à une variable dans l'expression une = 3 , un est un nom.
Re : La mise à jour de la zone de liste de colonnes à l'aide d'une liste stockée dans une variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?C'est ce qui me laisse perplexe.
Nous avons appris que le Colonnes("hauteur" ) dans
Distribution(Columns("height"));est un (facultatif) argument nommé.
Donc qu'est-ce Colonnes dans Distribution(Colonnes("hauteur")); ?
D'un point de vue grammatical, il pourrait s'agir du "nom" - qui a été donné à l'argument nommé.
Mais cela entre en conflit avec la définition standard de nom en JSL. (comparer: comme nom(x))
Je suppose que je ne suis pas le premier à poser cette question - et je suppose qu'il existe un nom officiel pour le nom d'un paramètre nommé.
Mais je n'ai pas eu la chance de le trouver dans la documentation.
@Mark_Bailey ?