Legen Sie die MAP-Rolle per Skript festHallo,
Ich erstelle ein Skript, um Anfängern beim Festlegen einiger Parameter in einer Datentabelle zu helfen, z. B. Tabellenvariablen und Kartenrollen.
Das Problem besteht darin, dass der Dateipfad nicht in den Spalteneigenschaften aufgezeichnet wird, wenn ich die Kartenrolle festlege
path = pick file ();
dt0:my_column << set property ("Map Role", Map Role ("Shape Name Use" (path), "My_column") ) ) ;Irgendwelche Ideen, was das verursacht?
Betreff: MAp-Rolle per Skript festlegenOk, endlich funktioniert mein Skript 
Aus irgendeinem Grund schrieb ich:
dt0:my_column << set property ("Map Role", Map Role (Shape Name Use (path, "my_column" ) ) ;Die im Variablenpfad enthaltene Zeichenfolge würde nicht in die Spalteneigenschaft übertragen. Es funktionierte immer noch nicht, als ich versuchte, Eval(path) und andere Problemumgehungen zu verwenden. Ich vermute, dass JSL die Auswertung von Variablen in dieser Nachricht nicht unterstützt.
Hier ist die Problemumgehung, die ich gefunden habe:
My_expression = Eval Expr ( dt0:my_column << set property ("Map Role", Map Role (Shape Name Use (Expr(path), "my_column" ) ) );
Eval (My_expression); Und das hat endlich seinen Zweck erfüllt!
Der Schritt, den Pfad von Posix nach Windows zu konvertieren, war letztendlich nicht notwendig, da die Spalteneigenschaft beide Formate akzeptiert.
Betreff: MAp-Rolle per Skript festlegenEs ist einfach. Hier sind Beispiele für verschiedene Argumente.
Literales Argument, numerischer Wert oder Zeichenfolge:
x = Sqrt( 5 );
x = Num( "5" );
Variables Argument:
x = 5;
y = Sqrt( x );
Benanntes Argument:
dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
Das letzte Beispiel enthält benannte Argumente (Y, X und Fit Line) und Literalargumente (:weight und :height). Ihr ursprünglicher Code hat das benannte Argument „Shape Name Use()“ in Zeichenfolgenbegrenzer eingeschlossen, wodurch es zu einem Zeichenfolgenargument wurde.
Betreff: MAp-Rolle per Skript festlegenSchaffe ich es also, diese Eigenschaft aus einer Textzeichenfolge festzulegen?
Sie sagten, dies sei „ein benanntes Argument, keine Zeichenfolge“. Was bedeutet das ? Ich denke, das ist ein Nachteil von JSL, da das System so einfach und flexibel ist, dass Benutzer nicht genau wissen, was sie manipulieren
Ich habe die folgenden Syntaxen ohne Erfolg ausprobiert:
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" ) ) );
Betreff: MAp-Rolle per Skript festlegenDanke @Mark_Bailey ,
Ich habe hier etwas gelernt. Ich wusste nicht, was Posix ist 
Als ich im Scripting-Index nach POSIX suchte, fand ich die Konvertierungsfunktion:
path = pick file () ;
converted_path= Convert File Path (path, windows) ;
Im Vergleich zur Verwendung der <
Betreff: MAp-Rolle per Skript festlegenDiese Route ist etwas umständlich und unnötig. Sieh dir das an Funktion .
Betreff: MAp-Rolle per Skript festlegenAußerdem denke ich, dass das Argument mit dem Pfad ein benanntes Argument und kein String ist, also sieht es so aus:
dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use( path ), "My_column" ) ) ) ;
Übrigens verwendet JMP standardmäßig das POSIX-Pfadformat, nicht das Windows-Format. Normalerweise erfolgt die Konvertierung jedoch automatisch, oder Sie können die integrierte Funktion zum Konvertieren zwischen den beiden Formaten explizit aufrufen.
Betreff: MAp-Rolle per Skript festlegenOk, es sieht so aus, als hätte ich eine Lösung dafür gefunden:
dt= open (pick file (), invisible ) ;
path = dt<< get path;
dt<<CLOSE></CLOSE>
Das scheint das Problem zu lösen 
Betreff: MAp-Rolle per Skript festlegenOk, nachdem ich eine Weile damit herumgespielt habe, sehe ich, wo das Problem liegt:
Dateipfade in Windows sehen wie folgt aus: C:\user\file.txt
Wenn Sie mit pick file() einen Pfad in jmp extrahieren, wird dieser in „C:/user/file.txt“ konvertiert. Ich vermute, das liegt daran, dass JMP „\“ als Sonderzeichen betrachtet. Das Seltsame ist, dass Sie in anderen JSL-Anweisungen einfach die JMP-Syntax für Dateipfade verwenden können, Map Role jedoch aus irgendeinem Grund die normale Windows-Syntax verwendet.
Nun ist meine Frage: Gibt es eine einfache Möglichkeit, einen JMP-Dateipfad in einen Windows-Dateipfad zu konvertieren? Etwas, das die Notwendigkeit vermeiden würde, es so zu schreiben:
„C:\!\user\!\file.txt“
Alternativ wäre auch ein Skript nützlich, das direkt auf die Spalteneigenschaften zugreifen und die Eingabeaufforderung zur Auswahl einer Datei im Kartenrollenbereich öffnen könnte.
Danke