我寫了一個腳本,如果文件夾不存在,那麼將創建一個文件夾。 路徑是共享網絡文件夾。 我可以修改共享文件夾的訪問權限,腳本對我來說很好用。 但是,當一個對共享文件夾只有讀訪問權限的同事運行腳本 JMP 時,當它到達下面的代碼部分時會崩潰。 JMP 只是完全關閉了所有內容,甚至是日誌文件,因此我看不到它是否有錯誤。 它對我來說很好用。
想知道為什麼會這樣?
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 );
);
我會使用這樣的腳本來縮小問題的範圍:
// 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 editor崩潰後,文件(在本例中位於桌面上)將在文件的最後一行顯示對 addlog 的最後一次調用。 經過幾次嘗試,您可能可以將問題縮小到一個語句。 我猜它會與網絡驅動器有關;確保將文件名等添加到日誌文件中。 使用 char() 將非文本值轉換為文本。
JMP 不應該崩潰;即使您找到了解決方法,如果將問題報告給技術支持會很好,謝謝!
編輯 1:我特別懷疑兩台計算機上的 S: 驅動器映射不同。 用一個聯合國大會如果這是問題(\\server\path\file),則名稱可能是一種解決方法。
編輯2:我認為公式列或表格中的當前行也可能存在問題。 像這樣(未經測試)可能會更好:
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 ) || "\");謝謝克雷格,你對編輯 1 (\\server\path\file) 是正確的。 一旦我映射了服務器而不是 s:它就完美地工作了。感謝一百萬的幫助:)