我写了一个脚本,如果文件夹不存在,那么将创建一个文件夹。 路径是共享网络文件夹。 我可以修改共享文件夹的访问权限,脚本对我来说很好用。 但是,当一个对共享文件夹只有读访问权限的同事运行脚本 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:它就完美地工作了。感谢一百万的帮助:)