檢查表是否是唯讀的?嘿,
我有一個大型 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。