錄音與檔案:Scripters Club 上有關資料存取、JMP Roasting 和技巧與竅門的內容影片 1 來自@Georg的資料訪問
評論:
- 儘管文件仍然缺乏,使用起來可能有點混亂......我仍然建議您使用它,因為它是首選方法,並且將(並且確實)支持連接器
- 您還可以在運行完成時訪問 queryResult“符號”,它應該是結果表的引用
- 總是使用 < << run foreground and do not rely on which is determined by user preferences< pan>

影片 2:JMP Roasting fro, @jthi
評論:
- 我建議查看腳本索引,以了解新視窗命令如何在不同模式下運作良好,大多數變體都有範例(模態、報告等)。
- 同意,那裡有例子。並不總是如我所願那麼有用。幾乎每次我使用 NewWindow() 時,我都想做一些沒有類似範例的事情。在搜尋社群時,我發現了 NewWindow() 的非常有用的範例。
- 也請添加添加示例的可能性。社區裡有很多非常有用的例子。我認為用所有的例子來充斥腳本索引是沒有意義的。但這將對我們有很大幫助,我們可以為我們的腳本索引添加有用的範例。
影片 3: @jthi的提示和技巧
發佈建議:
回覆:記錄與檔案:Scripters Club 上有關資料存取、JMP Roasting 和技巧與訣竅的內容附上我的材料
回覆:記錄與檔案:Scripters Club 上有關資料存取、JMP Roasting 和技巧與訣竅的內容好極了!令人驚訝的是,自 2023 年成立以來,這些會議一直成為立即有用的知識來源。
我想知道 Open Database() JSL 函數中是否有關於 SQL 的意見?我們正在使用 Google 的 BigQuery 實現資料倉儲。在 BigQuery 內部,可以開發和偵錯可直接複製並貼上到 Open Database() 中的 SQL 查詢,如下所示。將 SQL 關鍵字或時間戳記連接進 SQL 的可能性也非常有用。
Names Default to Here(1);
start = "'2025-02-18 00:00:00'";
stop = "'2025-02-18 01:00:00'";
dt = Open Database( "DSN_name", "
SELECT
time,
tagname,
value
FROM
`bq_project.dataset.table`
WHERE
time BETWEEN TIMESTAMP("|| start ||") AND TIMESTAMP("|| stop ||")
AND tagname IN(
'tag_1',
'tag_2'
)"
);
回覆:記錄與檔案:Scripters Club 上有關資料存取、JMP Roasting 和技巧與訣竅的內容我的建議是使用新 SQL 查詢(我知道這很糟糕...但這是首選方法)並利用 SQL 模板,然後使用 Eval Insert 對其進行評估。以下為範例:
Names Default to Here(1);
MY_CONNECTOR = "ODBC:...";
start = "'2025-02-18 00:00:00'";
stop = "'2025-02-18 01:00:00'";
sql_template = "\[
SELECT
time,
tagname,
value
FROM
`bq_project.dataset.table`
WHERE
time BETWEEN TIMESTAMP(¤start¤) AND TIMESTAMP(¤stop¤)
AND tagname IN(
'tag_1',
'tag_2'
)
]\";
sql_str = Eval Insert(sql_template, "¤");
// Write("\!N", sql_str);
obj = New SQL Query(
Connection(MY_CONNECTOR),
Custom SQL(sql_str),
Query Name("mytable")
);
dt = obj << Run Foreground();
Write();
您可以將類似的範本想法用於新 SQL 查詢之外的其他方法(例如開啟資料庫())。
我在 Eval Insert() 中使用特殊字元“¤”,因為預設的“^”在 Regex 等中很常見,它會在評估期間引起問題。
編輯:修正了一些拼字錯誤,改進了語言,並添加了關於“¤”的評論
回覆:記錄與檔案:Scripters Club 上有關資料存取、JMP Roasting 和技巧與訣竅的內容感謝@jthi的非常有用的演示!啟發我重寫動態建立的模態視窗以避免使用字串並使用 XPath 方法提取結果。
我確實發現了一件無法避免解析字串的事情——我想在模態視窗內包含 XPath 命令,但它需要動態建立。
我想創建一個複選框來控製文字編輯框是否啟用,但我不知道會有多少個文字編輯框/複選框對:
rc_list = Lineup Box( N Col( 3 ) );
rc_list << append( Text Box( "Current", <<SET font=""></SET>
Is there a way of doing this so I don't need to parse JSL strings? Or is there a better way to do this modal recode?
<BR /><P>我的完整程式碼在這裡:</P><DIV class="lia-spoiler-container"><A class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer" target="_blank">看更多...</A><NOSCRIPT>(突出顯示以閱讀)</NOSCRIPT><DIV class="lia-spoiler-border"><DIV class="lia-spoiler-content"><PRE><CODE class=" language-jsl">Names Default To Here( 1 );
// Function to do a simple in-place column recode.
// Uses a modal dialog so can be used as part of a larger script or workflow.
modal_recode = Function( {dt, col},
{default local},
Summarize( dt, orig_vals = By( col ) );
rc_list = Lineup Box( N Col( 3 ) );
rc_list << append( Text Box( "Current", <<SET font=""></SET></CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">名稱預設為此處( 1 ); // 執行簡單就地列重新編碼的函數。 // 使用模態對話框,因此可以用作更大的腳本或工作流程的一部分。 modal_recode = 函數({dt,col},{default local},Summarize(dt,orig_vals = By(col));rc_list = 陣容框(N Col(3));rc_list << append(文字方塊(“目前”,< <SET font=""></SET></DIV></DIV>回覆:記錄與檔案:Scripters Club 上有關資料存取、JMP Roasting 和技巧與訣竅的內容在這種情況下,我不會使用 << XPath,而是使用這個 << prev sib。我認為這正是你想要的:
因此,
Eval(
Parse(
"\[rc_list << append( check box( "", <<SET function=""></SET>
<P>你可以做這樣的事情</P>
<CODE class=" language-jsl">rc_list << Append(Check Box("", << Set Function(function({this},
(this << prev sib) << Enabled(this << get);
))));
完整程式碼
看更多...
Names Default To Here(1);
// Function to do a simple in-place column recode.
// Uses a modal dialog so can be used as part of a larger script or workflow.
modal_recode = Function({dt, col},
{default local},
Summarize(dt, orig_vals = By(col));
rc_list = Lineup Box(N Col(3));
rc_list << append(Text Box("Current", <<SET font=""></SET>
</CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">名稱預設為此處(1); // 執行簡單就地列重新編碼的函數。 // 使用模態對話框,因此可以用作更大的腳本或工作流程的一部分。 modal_recode = 函數({dt,col},{default local},Summarize(dt,orig_vals = By(col));rc_list = 陣容框(N Col(3));rc_list << append(文字方塊(“目前”,< <SET font=""></SET></DIV></DIV>
<P>如果您確實想為此使用 XPath,則可以動態計算索引。例如,您可以獲得所有 CheckBoxBoxes,然後使用 Contains<EM>來</EM>取得索引,然後使用該索引</P>
<CODE class=" language-jsl">idx = Contains(rc_list << XPath("//CheckBoxBox"), this); 回覆:記錄與檔案:Scripters Club 上有關資料存取、JMP Roasting 和技巧與訣竅的內容謝謝@jthi !先前的 sib 方法對我有用。我需要改變我對 JMP 視窗的建構方式及其操作方式的自然思考方式。
回覆:記錄與檔案:Scripters Club 上有關資料存取、JMP Roasting 和技巧與訣竅的內容我已多次改變我的想法並且有時仍會這樣。我認為我通常會根據情況使用四種不同的方法(以及這些方法的組合):
- XPath
- 收集列表/關聯數組的引用
- << 設定函數(function(this()))
- 通常是為了控制一些動作,例如你的情況是啟用(0/1)。我通常不會用這個來更新任何變數值
- 參考評估
- 沒有具體的例子,也許由於某種原因用 XPath 構建“路徑”或使用它變得煩人而我仍然需要引用(有時在返回新視窗的類別或函數中)
參考評估範例
rc_list << append(teb = Text Edit Box(Char(orig_vals[i]), <<ENABLED></ENABLED>
<BR />
<BR />回覆:記錄與檔案:Scripters Club 上有關資料存取、JMP Roasting 和技巧與訣竅的內容對於一次回覆我只能給這麼多的讚。謝謝, @jthi ,真的。