confus sur JSL sous forme d'expression<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Je souhaite stocker une petite table dans une autre table afin qu'un script qui utilise les deux dans le même rapport puisse reconstruire la petite à chaque fois que cela est nécessaire.Cela semble une bonne solution car les utilisateurs de la table peuvent également facilement ouvrir cette petite table d'informations associée tout en ne stockant qu'une seule table de données.
J'ai fait fonctionner ce qui suit, après de nombreux grincements de dents sur des couches de syntaxe expr()....
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Ouvert("$SAMPLE_DATA/Abrasion.jmp");
ts=dt<
Fermer(dt,nosave);
ne=nomexpr(ts);
eval(substitute(expr(dt2<
//...plus tard...
dt2<
dtBigClass=currentdatatable();
Mais 2 questions...
1) est-ce vraiment si compliqué ?Après avoir utilisé getscript() pour obtenir le script, n'existe-t-il pas un moyen plus simple de « mettre » le script que j'ai entré dans une table ?
2) Je ne suis pas ravi d'utiliser currentdatatable() pour que la variable dtBigClass pointe sur la table après avoir exécuté le script.Il semble probable qu'il y ait peut-être une mauvaise chose là-dedans. Supposons que le script échoue ou qu'il y ait un problème de timing, il est toujours en cours d'attribution d'une table ou autre à dtBigClass.Le script ressemble à "New Table("Big Class.. blah, blah" et j'aimerais vraiment exécuter " dtBigClass=NewTable("Big Class...blah blah..."Je serais très heureux d'une solution où je peux "mettre" le script sous la forme d'une chaîne de texte que je peux éditer et exécuter davantage. franchement .
Re : confus à propos de JSL sous forme d'expressionMerci!
J'apprécie ces deux réponses.Je devrais probablement travailler plus dur pour comprendre ceux basés sur eval expr() mais je dois l'admettre. La méthode incontournable consiste à évaluer (parse ()) une chaîne de texte.Moins de réflexion et je peux exécuter la partie chaîne et examiner directement ce que je construis.Cependant, je n'arrivais pas à comprendre comment le mettre dans une chaîne...
char(dt<
ts=dt<
et puis char(ts)...
...cela ne fonctionne pas.
De même, votre réponse à 2 semble super simple mais il ne m'est pas venu à l'esprit que cela fonctionnerait !.Je suis encore un peu surpris - ce n'est pas évident pour moi, cela renverrait quelque chose à mettre dans dtBigClass mais c'est génial.
Re : confus à propos de JSL sous forme d'expressionLa manipulation des expressions peut être frustrante. Il n'est pas toujours facile de savoir si les arguments d'une fonction sont évalués au moment de l'exécution ou simplement acceptés tels qu'écrits. En règle générale, lors du transfert d'expressions vers des éléments de l'interface graphique tels que des formules de colonne ou des scripts de table, cela nécessite un effort supplémentaire car l'argument n'est pas évalué. Parfois, il est plus facile de créer une chaîne puis de eval(parse()) que de déterminer l'utilisation optimale de expr(), evalexpr() etc.
1) Cela peut être quelque peu simplifié. Cet exemple montre deux façons de procéder
dt = Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" ) ;
dt2 = Ouvrir ( "$SAMPLE_DATA/Abrasion.jmp" ) ;
//1. Expression
Évaluer ( Expr d'évaluation ( dt2 << nouveau script ( "Grande Classe" , dtBigClass = Expr ( dt << obtenir le script )))) ;
//2. Chaîne
Évaluer ( Analyser ( "dt2 << nouveau script(\!"BigClass2\!", dtBigClass2 =" || Carboniser ( dt << obtenir le script ) || ")" )) ;
Fermer ( dt , nosave ) ;
dt2 << script de lancement ( "Grande Classe" ) ;
dt2 << script de lancement ( "GrandeClasse2" ) ;
2) Vous pouvez effectuer le devoir dans le script comme ci-dessus ou comme ci-dessous
dtBigClass = dt2 << script de lancement ( "Grande Classe" ) ;
Re : confus à propos de JSL sous forme d'expression1 : Presque aussi compliqué.NewScript s'attend à ce que son argument soit le script, ce qui est souvent la bonne réponse. Pas cette fois.
2 : Je n’aime pas non plus CurrentDatatable pour ce travail.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA/Abrasion.jmp" );
Eval( Eval Expr( dt2 << NewScript( "BigClass", bigclass = Expr( dt << getscript ) ) ) );
Le remplacement est un moyen, mais vous pouvez également utiliser EvalExpr pour évaluer uniquement l'Expr.Le résultat de EvalExpr est une expression :

qui doit encore être évalué.EvalExpr a recherché Expr et l'a évalué, puis a renvoyé l'expression originale avec la substitution effectuée.En revenant à la ligne 3, une autre Eval est effectuée pour exécuter la commande NewScript (mais pas l'affectation à grande classe ).
Lorsque le script nommé "BigClass" s'exécute, il attribue la variable grande classe , évitant ainsi le besoin de CurrentDatatable.