Définir le rôle MAp via un scriptBonjour,
Je fais un script pour aider les débutants à définir certains paramètres dans une table de données, tels que les variables de table et les rôles de carte.
Le problème est que lorsque je définis le rôle de carte, le chemin du fichier n'est pas enregistré dans les propriétés de la colonne
path = pick file ();
dt0:my_column << set property ("Map Role", Map Role ("Shape Name Use" (path), "My_column") ) ) ;Des idées ce qui cause cela?
Re: définir le rôle MAp via un scriptOk, après avoir tripoté avec ça pendant un moment, je vois où se situe le problème:
les chemins de fichiers sous Windows ressemblent à ceci C: \ user \ file.txt
Lorsque vous extrayez un chemin dans jmp en utilisant pick file (), il le convertit en "C: /user/file.txt". Je suppose que c'est parce que JMP considère '\' comme un caractère spécial. La chose étrange est que, dans d'autres instructions JSL, vous pouvez simplement utiliser la syntaxe JMP pour les chemins de fichier, mais pour une raison quelconque, le rôle de carte utilise la syntaxe Windows normale.
Maintenant, ma question est: existe-t-il un moyen simple de convertir un chemin de fichier JMP en chemin de fichier Windows? Quelque chose qui éviterait d'avoir à l'écrire comme ceci:
"C: \! \ Utilisateur \! \ Fichier.txt"
Alternativement, un script qui pourrait accéder directement aux propriétés de la colonne et ouvrir l'invite pour choisir un fichier dans le volet de rôle de la carte serait également utile.
Merci
Re: définir le rôle MAp via un scriptOk on dirait que j'ai trouvé une solution à ça:
dt= open (pick file (), invisible ) ;
path = dt<< get path;
dt<<CLOSE></CLOSE>
Cela semble le résoudre
Re: définir le rôle MAp via un scriptDe plus, je pense que l'argument avec le chemin est un argument nommé, pas une chaîne, donc il ressemble à ceci:
dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use( path ), "My_column" ) ) ) ;
BTW, JMP utilise le format de chemin POSIX par défaut, pas le format Windows. Mais généralement, il se convertit automatiquement ou vous pouvez appeler explicitement la fonction intégrée pour convertir entre les deux formats.
Re: définir le rôle MAp via un scriptCette route est un peu ronde et inutile. Regarde ça une fonction .
Re: définir le rôle MAp via un scriptMerci @markbailey ,
J'ai appris quelque chose ici. Je ne savais pas ce qu'était Posix:)
En recherchant POSIX dans l'index de script, j'ai trouvé la fonction de conversion:
path = pick file () ;
converted_path= Convert File Path (path, windows) ;
Comparé à l'utilisation du message << get path, cela enregistre l'ouverture de la table.
Re: définir le rôle MAp via un scriptDonc, je parviens à définir cette propriété à partir d'une chaîne de texte?
Vous avez dit que c'est "un argument nommé, pas une chaîne". Qu'est-ce que ça veut dire ? Je suppose que c'est un inconvénient de JSL, le système étant si simple et flexible, les utilisateurs ne connaissent pas la nature exacte de ce qu'ils manipulent
J'ai essayé les syntaxes suivantes en vain:
dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use(Eval( path) ), "My_column" ) );
dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use(Expr( path) ), "My_column" ) );
Eval Expr (dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use(Expr( path) ), "My_column" ) ) );
Re: définir le rôle MAp via un scriptC'est simple. Voici des exemples de différents arguments.
Argument littéral, chaîne numérique ou de caractères:
x = Sqrt( 5 );
x = Num( "5" );
Argument variable:
x = 5;
y = Sqrt( x );
Argument nommé:
dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
Le dernier exemple inclut des arguments nommés (Y, X et Fit Line) et des arguments littéraux (: weight et: height). Votre code d'origine comprenait l'argument nommé Shape Name Use () dans les délimiteurs de chaîne de caractères, ce qui en faisait un argument de chaîne de caractères.
Re: Définir le rôle MAp via un scriptOk, enfin mon script fonctionne:)
Pour une raison quelconque, quand j'ai écrit:
dt0:my_column << set property ("Map Role", Map Role (Shape Name Use (path, "my_column" ) ) ;Il ne transfère pas la chaîne contenue dans le chemin de la variable dans la propriété de la colonne. Cela ne fonctionnait toujours pas lorsque j'essayais d'utiliser Eval (chemin) et d'autres solutions de contournement. Je suppose que JSL ne prend pas en charge l'évaluation des variables à l'intérieur de ce message.
Voici donc la solution de contournement que j'ai trouvée:
My_expression = Eval Expr ( dt0:my_column << set property ("Map Role", Map Role (Shape Name Use (Expr(path), "my_column" ) ) );
Eval (My_expression); Et cela fait enfin l'affaire!
L'étape de conversion du chemin de posix vers Windows n'était pas nécessaire à la fin, car la propriété de la colonne accepte les deux formats.