检查表是否是只读的?嘿,
我有一个大型 jsl 脚本,其中在一个阶段打开几个数据表,将数据放入其中,保存并关闭它们。
现在,正常运行没有任何问题。 但它打开的数据表位于公司服务器上,偶尔会发生其他人打开该文件的情况,这意味着该脚本打开只读版本,并且无法保存到其中。
有什么方法可以向脚本添加一种方法来检查文件是否以只读模式打开,以便我可以取消脚本并警告用户? 与 Excel 类似,如果您打开其他人正在使用的文件,您会收到一条消息“文件正在由 X 使用,您想打开只读版本吗?”。
谢谢,
埃德温回复:检查表是否是只读的?我终于找到了一个可行的解决方案,因此我将其发布,以防其他人将来发现此线程。
dt = Data Table("Untitled");
Try(test = LogCapture(dt << save));
If(Contains(test, "problem"),
New Window("Error",
<<MODAL></MODAL>如果表是只读的且无法锁定,则 test 将变为
test = "
I/O problem.
File not open in Write mode.
";
这就是为什么 Contains(test, "problem") 有效的原因。
回复:检查表是否是只读的?是的,我也有一种感觉,我们缺少一些简单的东西,无论如何谢谢你。 还有其他人有想法吗?
回复:检查表是否是只读的?抱歉,我已经没有想法了。 也许另一个贡献者可以想出办法。 (这可能是我没有想到的简单事情。)
回复:检查表是否是只读的?嘿,
我尝试过这个解决方案,并尝试以几种不同的方式构造 Try 函数,但它似乎永远不会到达第二个表达式,即使第一个表达式确实生成了错误。 该表仍处于关闭状态,但未保存。 日志文件如下所示:
Names Default to Here(1);
dt = Data Table("CharData G4 v3.0");
dt << add rows(1);
Try(
Close( dt, Save ),
Print( "Data table locked" );
);
I/O problem.
File not open in Write mode. 回复:检查表是否是只读的?好的,也许可以使用 Try( expr1, expr2 ) 函数。 第一个参数是始终被求值的表达式。 将保存操作用于第一个参数。 第二个参数是一个表达式,仅当第一个参数生成错误时才计算该表达式。 这样你就可以捕获错误。
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// changes made to data table, save table
Try(
Close( dt, Save ),
Print( "Data table locked" );
);
// rest of script
回复:检查表是否是只读的?嘿,非常感谢您的回复。 不幸的是,这两种解决方案都不适合我,<< Get Lock 返回“0”,<< Get Edit Lock 返回“Empty()”。
我现在在另一台计算机上打开了一个表,并且是我自己的。 我可以在自己的计算机上随意编辑它,没有任何内容被锁定。 但是当我尝试保存它时,我无法保存它,并且收到与以前相同的错误消息“I/O 问题。 文件未在写入模式下打开。”。回复:检查表是否是只读的?忘记我上面的建议。 编辑锁与旧的锁机制是分开的。 一种简单的方法是打开数据表并向任意列发送 << Get Lock 消息。 如果数据表被锁定,那么所有列也被锁定。 结果应该是 true (1)。
回复:检查表是否是只读的?请参阅帮助 > 脚本索引。 搜索“锁定”并查找“获取编辑锁定”和“设置编辑锁定”消息。 第一个将获取您想要的状态信息。 第二个将描述可能返回的选项。
回复:检查表是否是只读的?只是想澄清一下,用户确实收到一条错误消息,显示“I/O 问题。 文件未在写入模式下打开。”
它仅在脚本尝试保存表时出现,因此它可以保存表 1 和 2,但无法保存表 3,这会扰乱我的数据处理。
我想添加一些在尝试保存任何表之前检查写入模式的内容。 我正在使用 JMP 13。