Ich habe ein Skript geschrieben, in dem ein Ordner erstellt wird, wenn kein Ordner vorhanden ist. Der Pfad führt zu einem freigegebenen Netzwerkordner. Ich habe Änderungszugriff auf den freigegebenen Ordner und das Skript funktioniert bei mir einwandfrei. Wenn jedoch ein Kollege, der nur Lesezugriff auf den freigegebenen Ordner hat, das Skript JMP ausführt, stürzt es ab, wenn es zum folgenden Codeabschnitt gelangt. JMP schließt einfach alles komplett, sogar die Protokolldatei, damit ich nicht sehen kann, ob es einen Fehler gibt. Und bei mir funktioniert es gut.
Sie fragen sich, warum das passiert?
datestamper = Long Date( Today() );
timestamp = MDYHMS( Today() );
dtname = New Table( "UserName",
add rows( 1 ),
New Column( "Time", Character, "nominal", set each value( timestamp ) )
);
dtname:Time << set data type( Numeric ) << Format( ("ddmonyyyy h:m:s"), Input Format( "mm/dd/yyyy h:m:s" ) );
dtname:Time << set data type( Character );
dtname << New Column( "Folder", Character, nominal, formula( Substr( :Time, 3, 7 ) ) );
foldername = Char( :Folder );
path = ("S:\Lab\JMP\Results\Data\" || Char( foldername ) || "\");
If( !Directory Exists( path ),
Create Directory( path ),
Print( path || " already exists." );
Wait( 0 );
);
Ich würde ein Skript wie dieses verwenden, um das Problem einzugrenzen:
// Create a log file on disk. Append each line to the end.
_LogFileName = "$desktop/JMP_log_file.txt";
// clear any old data and make sure the file exixts:
Save Text File( _LogFileName, Format( Today(), "h:m:s" ) || " starting\!n", Mode( "replace" ) );
addLog = Function( {txt},
Save Text File( _LogFileName, Format( Today(), "h:m:s" ) || " " || Char( txt ) || "\!n", Mode( "append" ) )
);
// example:
addlog( "begin loop" );
For( i = 1, i < 3, i += 1,
addlog( "looping " || Char( i ) )
);
addlog( "done" );
Open( _LogFileName, "script" ); // open in a script editorNach dem Absturz zeigt die Datei (in diesem Beispiel auf dem Desktop) den letzten Aufruf von addlog in der letzten Zeile der Datei an. Nach ein paar Versuchen können Sie das Problem wahrscheinlich auf eine einzige Aussage eingrenzen. Ich vermute, es hängt mit dem Netzlaufwerk zusammen; Achten Sie darauf, die Dateinamen usw. zur Protokolldatei hinzuzufügen. Verwenden Sie char(), um Nicht-Text-Werte in Text umzuwandeln.
JMP sollte nicht abstürzen; Selbst wenn Sie einen Workaround finden, wäre es großartig, das Problem dem technischen Support zu melden, danke!
Bearbeiten 1: Ich wäre besonders misstrauisch, wenn die S:-Laufwerkskarte auf beiden Computern nicht gleich ist. Verwendung einer UNC name kann ein Workaround sein, wenn dies das Problem ist (\\server\path\file).
Bearbeiten 2: Ich denke, dass möglicherweise auch ein Problem mit der Formelspalte oder der aktuellen Zeile in der Tabelle vorliegt. Etwas wie dieses (ungetestet) könnte besser sein:
datestamper = Long Date( Today() );
timestamp = MDYHMS( Today() );
dtname = New Table( "UserName",
add rows( 1 ),
New Column( "Time", Character, "nominal", set each value( timestamp ) )
);
dtname:Time << set data type( Numeric ) << Format( ("ddmonyyyy h:m:s"), Input Format( "mm/dd/yyyy h:m:s" ) );
dtname:Time << set data type( Character );
dtname << New Column( "Folder", Character, nominal, formula( Substr( :Time, 3, 7 ) ) );
dtname << runFormulas; // force the formulas to run now
foldername = Char( dtname:Folder[1] ); // explicit table and row subscript
path = ("S:\Lab\JMP\Results\Data\" || Char( foldername ) || "\");Danke Craig, mit der Bearbeitung 1 (\\server\path\file) lagst du richtig. Einmal habe ich den Server eher als s zugeordnet: es funktionierte perfekt. Tausend Dank für deine Hilfe 