Problème dans mon application que je résolvais toute la journée. Je l'ai réduit à ce comportement très bizarre. À moins que je manque quelque chose, cela ne devrait pas être comme ça.
J'ai deux tables ouvertes: "Baseball" et "Basketball".
J'ai ce script:
Clear Log();
//dt_current=Data Table("Basketball");
/*Two tables opened: Baseball and Basketball. The table named "Basketball" is selected as current table*/
dt_working=Data Table("Baseball");
Show("This is the dt_working table:");
Show(dt_working<<GET name=""></GET>Évidemment, j'essaie de créer une zone de liste de colonnes avec des colonnes de la table de baseball.
Mais voici ce que mon journal (et le reste de l'application) me montre:
"This is the dt_working table:";
dt_working << Get Name() = "Baseball";
"Columns names:";
colNamesList = {Player, Batting};
"This is what dt_working still is:";
dt_working << Get Name() = "Baseball";
"But this is what I got in Col List Box:";
colListX << Get Items = {"School", "CSN", "Durham Sun", "Durham Herald", "Washington Post", "USA Today", "Sports Magazine", "In Sport", "UPI", "AP", "Sports Illustrated"};Pour une raison quelconque, même si j’ai spécifié dt_working Baseball et que la zone de liste Col est créée à l’aide de la table dt_working, elle est renseignée avec les colonnes de la table de données actuelle que j'ai choisie dans la barre d’outils.
Une autre application qui a généralement un code différent, mais cette partie est exactement la même chose fonctionne différemment et comment je voulais que cela fonctionne. Quelqu'un peut-il m'aider à résoudre le problème? Pourquoi ne remplit-il pas la zone de liste des colonnes du tableau que je lui ai demandé de renseigner, mais à partir du tableau actuel?
À long terme, j'essaie d'afficher les colonnes des tables que je sélectionne dans une zone de liste différente. Une fonctionnalité similaire dans une autre application fonctionne très bien. Ici, peu importe la table sur laquelle je clique (et exécute un code similaire à celui que j'ai cité), il affiche toujours les colonnes de la table sélectionnée en haut.
Merci,
M.
@MathStatChem a écrit:
De plus, en regardant la syntaxe dans le guide de script, il semble que la syntaxe ne permet pas l'utilisation d'une référence de table de données, vous devez utiliser la syntaxe:
y = Zone de liste Col (
, ...)
La table de données () dans les arguments de Col List Box () n'est pas une fonction, c'est un argument nommé qui permet à Col List Box () de savoir que l'argument doit être interprété comme une table de données. En tant que tel, il prend comme argument une référence à une table de données. Voici un exemple:
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA\Solubility.jmp" );
New Window("Example", Col List Box( Data Table( dt ), all ) );
Le message << Obtenir un nom n'est pas nécessaire.
Nous allons essayer de détecter automatiquement si le premier argument est une référence de table de données.
Grâce à @Justin_Chilton pour l'explication.Re: Suis-je en train de devenir fou ou comment est-ce possible? - Besoin d'aide pour résoudre un comportement étrange
@ gzmorgan0 a écrit:
Oui, c'était ma recommandation d'utiliser ColListBox (Data Table (dt_ref << getname), ...)
Et il fonctionne! Tu m'as sauvé deux fois aujourd'hui!
Re: Suis-je en train de devenir fou ou comment est-ce possible? - Besoin d'aide pour résoudre un comportement étrangeOk, peut-être pas un bug, je vais devoir chercher de vieux emails, mais j'ai trouvé une référence avec ColListBox (dt, ...) quelque part et marqué JMP.
Oui, c'était ma recommandation d'utiliser ColListBox (Data Table (dt_ref << getname), ...)
Re: Suis-je en train de devenir fou ou comment est-ce possible? - Besoin d'aide pour résoudre un comportement étrangeEn outre, en regardant la syntaxe dans le guide de script, il semble que la syntaxe ne permet pas l'utilisation d'une référence de table de données, vous devez utiliser la syntaxe:
y = Zone de liste Col (
, ...) donc en utilisant ce code y=Col List Box( Data Table(dt_working<<GET name=""></GET>vous donne le résultat souhaité. Je ne pense pas que ce soit un bug, c'est juste une syntaxe maladroite. Re: Suis-je en train de devenir fou ou comment est-ce possible? - Besoin d'aide pour résoudre un comportement étrangeAh, d'accord, je vois. La zone de liste des colonnes utilise donc la table de données actuelle, et non la référence de la table de données. Une solution rapide consiste à insérer dans le script, juste avant l'instruction colList, cette instruction:
Tableau de données actuel (dt_working);
Re: Suis-je en train de devenir fou ou comment est-ce possible? - Besoin d'aide pour résoudre un comportement étrangeOui, j’avais ouvert un autre script, mais cela fonctionnait comme
prévu. Je vais essayer la solution de Georgia et vous laisser savoir si cela fonctionne. J'ai eu un
forte suspicion que c’était un gros problème, ce n’était pas clair pour moi
depuis exactement le même code a bien fonctionné dans une autre application.Re: Suis-je en train de devenir fou ou comment est-ce possible? - Besoin d'aide pour résoudre un comportement étrangeJ'ai exécuté votre code en utilisant la table Baseball.JMP à partir des données d'exemple et je n'ai pas vu le comportement que vous observez. Voici mon journal de sortie.
"This is the dt_working table:";
dt_working << Get Name() = "Baseball";
"Columns names:";
colNamesList = {Player, Batting};
"This is what dt_working still is:";
dt_working << Get Name() = "Baseball";
"But this is what I got in Col List Box:";
colListX << Get Items = {"Player", "Batting"};Avez-vous eu un autre script ouvert où vous avez créé la référence colListX, peut-être avec une autre table?
Il peut être préférable d’utiliser la commande Names Default to Here (1) au début du script. Si vous ne le faites pas, toutes vos variables sont globales et deux scripts différents peuvent se superposer.
Re: Suis-je en train de devenir fou ou comment est-ce possible? - Besoin d'aide pour résoudre un comportement étrangeJ'appellerais cela un bug. Je me suis fait avoir par cette dernière année. Cependant, il existe une solution. Le problème est que ColListBox n'évalue ni ne analyse la référence de table dt_working. Ma recommandation est d'utiliser la syntaxe ColListBox (Data Table (dt_working << get name), .... ou pour que la table souhaitée devienne la table de données actuelle lors de la création de colListX.
hmmm mon JSl est emballer. Script attaché.
open("$Sample_data/Basketball.jmp");<BR />open("$Sample_data/Baseball.jmp");<BR /><BR />Clear Log();<BR /> //dt_current=Data Table("Basketball");<BR /> /*Two tables opened: Baseball and Basketball. The table named "Basketball" is selected as current table*/<BR /> dt_working=Data Table("Baseball");<BR /> <BR /> Show("This is the dt_working table:");<BR /> Show(dt_working<<GET name=""></GET> colNamesList = dt_working << Get Column Names;<BR /> show("Columns names:");<BR /> show(colNamesList);<BR /> show(current data table()); //Baseball<BR /> <BR /> colListX = Col List Box (all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> //_______________________________________________________<BR /> <BR /> Write("\!N" ||Repeat("_",60)||"\!N");<BR /> <BR /> //make Basektball current <BR /> <BR /> current data table(Data Table("Basketball"));<BR /> <BR /> colListX = Col List Box (dt_working, all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> colListX = Col List Box (NameExpr(dt_working), all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> colListX = Col List Box (Data Table("Baseball"), all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET> <BR /> <BR /> colListX = Col List Box (Data Table(dt_working<<GET name=""></GET> show(colListX<<GET items=""></GET><BR /><BR /> Eval( <BR /> Parse( EvalInsert("colListX = ColListBox( ^dt_working^, all, width(250), maxSelected(1));") )<BR /> );<BR /> wait(0);<BR /> show(colListX<<GET items=""></GET>