Comment conserver la mise en forme et les commentaires avec New Script() ?Bonjour à tous,
c'est encore moi. Autre jour, autre question 
J'ai donc créé un joli long script qui crée une nouvelle table de données contenant des scripts. J'utilise la fonction New Script () pour ce faire.
dt<< New script ("myscript",
// comments
//beautiful indentation
(
(
( ( instructions) )
)
)
)
);
Mon problème est que lorsque je vérifie le script Inside the table dt, tous les commentaires sont perdus, ainsi que la mise en page, mon style personnel d'indentation, les lignes vides, etc.
Ces scripts sont destinés aux utilisateurs qui ne sont pas nécessairement familiarisés avec JSL, je dois donc conserver les commentaires et la mise en page d'origine.
J'essayais de faire quelque chose comme mettre mes scripts dans une chaîne et utiliser Append() ou Append Text() mais sans succès.
mystring = " \[ // all my
// script
]\" ;
myscript = dt<<NEW script=""></NEW>Malheureusement, cela n'a pas fonctionné. Des idées ? Quelques astuces utilisant Expr/ Eval , etc peut-être ?
Re : Comment conserver la mise en forme et les commentaires avec New Script() ?eh bien, eh bien, on dirait qu'on a un gagnant !
J'adore quand vous passez des jours à vous attaquer à un problème apparemment impossible, puis que quelqu'un révèle que la solution est un script d'une ligne :face_with_tears_of_joy:
merci beaucoup @XanGregg 
Re : Comment conserver la mise en forme et les commentaires avec New Script() ?JSL Quote() pourrait aider :
New Table( "formatted script",
New Script( "my script",
Eval( Parse(JSL Quote(
// example
x = 1;
Print( :column 1[1], y );
) )
)
),
New Column( "Column 1", Set Values( [5] ) )
)
Re : Comment conserver la mise en forme et les commentaires avec New Script() ?Vous avez dit, " Autant que je sache, il n'y a aucun moyen de faire référence à un script dans une table de données et c'est le problème. Ce que je veux dire, c'est qu'il n'y a pas de datatable : myscript ou datatable< " Vous pouvez envoyer ce message à la table de données, après avoir exécuté mon exemple de code ci-dessus :
dt << Get Script( "My Script" );
Maintenant, je peux utiliser des fonctions d'expression ou de chaîne de caractères pour modifier le script à partir de la table de données.
Re : Comment conserver la mise en forme et les commentaires avec New Script() ?Salut @Mark_Bailey ,
Merci pour ce bout de code, il est vraiment utile.
Cela résout donc un point : le contenu d'une fenêtre de script peut être sauvegardé dans un Script.
Mais, la première partie semble toujours vraie "Les scripts JMP ne peuvent pas être modifiés par un autre script". Le script que vous avez fourni écrit un nouveau script à chaque fois avec la fonction New Script() ;
Autant que je sache, il n'y a aucun moyen de faire référence à un script dans une table de données et c'est le problème. Ce que je veux dire, c'est qu'il n'y a pas de datatable : myscript ou datatable<
tout ce que l'on peut faire est de copier des scripts, puis de les coller dans un nouveau script. Mais, en effet, cela ne résout pas le problème car il le transforme en une expression JSL, supprimant les commentaires et le formatage dans le processus.
Je pense qu'il est temps d'admettre qu'il n'y a actuellement aucune solution. Il est dans la liste de souhaits JMP, afin que @Jeff_Perkinson mentionné,
tous ceux qui sont intéressés s'il vous plaît assurez-vous de kudo Conserver-les-commentaires-et-les-espaces-blancs-dans-le-code-JSL-attaché-aux-données !!
Re : Comment conserver la mise en forme et les commentaires avec New Script() ?Les scripts de table pourraient exécuter les scripts qui sont enregistrés de cette façon.
Include( "My Path/My Script.jsl" );
Vous pouvez placer les scripts n'importe où (par exemple, un seul dossier de référentiel) et inclure le chemin complet.
Re : Comment conserver la mise en forme et les commentaires avec New Script() ?Vous avez dit, " il semble que les scripts JMP ne puissent pas être modifiés par un autre script. J'essayais d'écrire mon script dans une boîte de script À l'intérieur d'une fenêtre.Mais pour autant que je sache, le contenu d'une boîte de script ne peut pas être enregistré dans une table de données. "
C'est possible. Ce n'est peut-être pas évident. Cela nécessite cependant des techniques de script qui ne sont pas basiques. Voici un exemple pour illustrer comment cela pourrait être fait. Il
Names Default to Here( 1 );
script window = New Window( "Script", << Modal,
sb = Script Box( "print(\!"Hello\!");" ),
H List Box(
Button Box( "OK", s = sb << Get Lines ),
Button Box( "Cancel" )
)
);
If( script window["Button"] == -1,
Throw( "User cancelled" );
);
Print( s );
n = N Items( s );
script = s[1];
For( line = 2, line <= n, line++,
script ||= "\!n" || s[line];
);
Print( script );
Eval( Parse( script ) );
Eval(
Substitute(
Expr( Current Data Table() << New Script( "My Script", sss ) ),
Expr( sss ),
Parse( script )
)
);
Cependant, le script de table perd la mise en forme car la fonction Parse() la supprime, tout comme l'interpréteur JSL. Cet exemple ne résout donc pas votre problème d'origine.
Re : Comment conserver la mise en forme et les commentaires avec New Script() ?Merci Mark Bailey,
c'est un morceau de code utile. Je suppose que l'on pourrait enregistrer les fichiers .jsl dans le même dossier que la table de données avec laquelle ils sont utilisés. Ce serait une façon raisonnable de faire les choses.Re : Comment conserver la mise en forme et les commentaires avec New Script() ?Nous avons rencontré ce problème lors de nos cours de formation JMP sur les scripts. Nous avons imposé un style et un format particulier pour rendre le code le plus clair possible donc nous avons voulu le maintenir en permanence. Notre solution consistait à tirer parti du journal JMP créé pour chaque cours. Nous avons ajouté un bouton pour chaque script que nous fournissons dans le cours. Le script de bouton stocke le script formaté sous forme de chaîne de caractères dans un fichier de script, puis l'ouvre ou l'exécute. Voici un exemple très simple pour illustrer ce que fait le bouton journal :
script = "dt = Open( \!"$SAMPLE_DATA/Big Class.jmp\!" );
dist = dt << Distribution( Y( :weight, :height ) );";
Save Text File( "My Script.jsl", script );
Open( "My Script.jsl" );
Cette solution fonctionne bien pour notre objectif dans la formation. Je ne pense pas que cela vous aidera, cependant.
Re : Comment conserver la mise en forme et les commentaires avec New Script() ?Mise à jour :
il semble que les scripts JMP ne puissent pas être modifiés par un autre script. J'essayais d'écrire mon script dans une boîte de script À l'intérieur d'une fenêtre.Mais pour autant que je sache, le contenu d'une boîte de script ne peut pas être enregistré dans une table de données.
Il semble que ce ne soit finalement pas faisable.
Quelques options de sauvegarde à moitié cuites cependant :
- En utilisant \[...]\, je peux enregistrer mon script dans la table de données sous forme de chaîne de texte. Les utilisateurs peuvent ensuite aller jeter un œil pour voir les commentaires. Ils peuvent également copier et coller cette chaîne dans un nouveau script et obtenir la mise en page et les commentaires d'origine. Pas si génial car cela nécessite une certaine contribution de la part de l'utilisateur.
- Une autre option de secours consisterait à créer une fonction de commentaire dans le script qui imprime les commentaires dans le journal. Une option pas si géniale non plus, car par défaut, les scripts exécutés à partir d'une table de données n'ont pas de journal intégré.
- Ou je pourrais simplement avoir mon code source disponible en tant que ressource dans un document Word ou PDF.
D'autres idées, idées ??
Re : Comment conserver la mise en forme et les commentaires avec New Script() ?Merci Jeff,
J'avais peur que ce soit la réponse. Cependant, je pense qu'il pourrait y avoir une solution de bricolage pour contourner cela ...
Par exemple, j'ai essayé de mettre tout mon script dans une instruction Expr () et il s'est bien exporté. Bien sûr, dans le script final, tout est encore entre les parenthèses de l'Expr.
Mais peut-être qu'un script d'édition de texte pourrait lire ceci et supprimer l'Expr et les crochets pour avoir le texte original ?
donc ma question est, est-ce possible? Un script peut-il éditer un autre script de cette manière ?
Ou peut-être pourrais-je enregistrer les scripts de ma table de données sous forme de fichiers .jsl séparés, puis faire en sorte que la table les importe automatiquement?
Allez, il doit y avoir un moyen de faire ça 
Re : Comment conserver la mise en forme et les commentaires avec New Script() ?Malheureusement, JMP n'est pas conçu pour conserver les commentaires et la mise en forme des scripts attachés à la table de données. Cela a été demandé dans la liste de souhaits JMP : Conserver les commentaires et les espaces blancs dans le code JSL . Assurez-vous de le féliciter pour indiquer votre soutien. Je vais m'assurer que les développeurs sont conscients du désir.