字符串轉數據表(代碼優化)循環中的 .exe 文件返回需要(高效)轉換為數據表的字符串。
該字符串具有以下特徵:
- 行由“\n”字符限制,但如果需要可以更改
- 列由“,”限制
- 字符串的開頭和結尾有需要刪除的行
- 日期時間行可能會有所不同。 在示例中可以看到 7,但這些可以達到 100k 行。
- 此操作將在循環中以數百次的順序重複(不同的字符串但相同的行數)
str_query =
"*> mycolumnname
1,mycolumnname,50.,mycolumdescription,mycolumnunits
* End exe...
*> mycolumnname, 31-Jan-2020 14:30:00, 31-Jan-2020 15:30:00, blabla, 7
31-Jan-20 14:30:00,mycolumnname,10.60466
31-Jan-20 14:40:00,mycolumnname,10.60466
31-Jan-20 14:50:00,mycolumnname,10.60466
31-Jan-20 15:00:00,mycolumnname,10.60466
31-Jan-20 15:10:00,mycolumnname,10.60466
31-Jan-20 15:20:00,mycolumnname,10.60466
31-Jan-20 15:30:00,mycolumnname,10.60466
* End exe...
...
...
...
...
";
如何將此字符串轉換為具有以下(堆疊)格式的數據表:
31-Jan-20 14:30:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 14:40:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 14:50:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:00:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:10:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:20:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:30:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
哪些 JSL 函數可以有效地管理這些字符串到數據表的操作(內存和/或 CPU 方面?)。
不能使用多線程或多處理,這是在查詢數據庫。
Re: 字符串轉數據表(代碼優化),
想知道您是否嘗試過 Craig 的方法? 它對你的例子有用嗎?
-B
Re: 字符串轉數據表(代碼優化)...並且您仍然可以將 CSV 參數傳遞給該 open 語句。 如果輸出的開頭有您無法修復的額外行,您可以告訴 open 語句有關第一條數據行、列名的存在以及要使用的數據類型。 如果數據超過幾行,將源腳本中的所有內容都告訴 JMP 可能會明顯更快,這樣 JMP 就不會進行額外的傳遞來猜測格式。 可以在已導入的 JMP 表中找到源腳本。
Re: 字符串轉數據表(代碼優化)涼爽的! RunProgram 可以返回一個 blob。 open() 函數可以接受一個 blob 來代替文件名。 如果您可以讓外部程序創建 CSV 作為其打印輸出(在 stdout 上),它應該可以工作。
這裡的例子: https://community.jmp.com/t5/Discussions/Load-CSV-from-variable/mp/208453
Re: 字符串轉數據表(代碼優化)是的,它幾乎是一個 CSV 格式的字符串,並且可以在一定程度上調整輸出。
當前代碼使用 RunProgram() 獲取輸出字符串,然後使用 Words() 獲取列表,最後使用 TextToColumns()。
我們可以直接 Open() 一個字符串嗎? 似乎 open 僅適用於文件,理想情況下應該避免這種情況。
Re: 字符串轉數據表(代碼優化)您的格式看起來很像 CSV 文件。 open() 函數理解 CSV 數據,如果你給它足夠的關於列和數據類型的信息,它會非常有效(你的開發時間和你的等待時間)。
您如何將數據從 .exe 程序獲取到 JMP? (平面文件?runProgram()?open()?其他什麼?)
Re: 字符串轉數據表(代碼優化)也許將這兩個部分放入列表中是一種入門方式?
clear globals();
query =
"*> mycolumnname 1,mycolumnname,50.,mycolumdescription,mycolumnunits
* End exe...
*> mycolumnname, 31-Jan-2020 14:30:00, 31-Jan-2020 15:30:00, blabla, 7
31-Jan-20 14:30:00,mycolumnname,10.60466
31-Jan-20 14:40:00,mycolumnname,10.60466
31-Jan-20 14:50:00,mycolumnname,10.60466
31-Jan-20 15:00:00,mycolumnname,10.60466
31-Jan-20 15:10:00,mycolumnname,10.60466
31-Jan-20 15:20:00,mycolumnname,10.60466
31-Jan-20 15:30:00,mycolumnname,10.60466
* End exe...
...
...
...
...
";
query=Substitute( query, "*> mycolumnname ", "colnames=list(" );
query=Substitute( query, "* End exe...", ");" );
query=Substitute( query, "*> mycolumnname, ", "coldata=list(" );
query=Substitute( query, "* End exe...", ");" );
for(i=1, i<=5, i++, query=Substitute( query, "...", "" ));
show(query);<BR /><BR />
你試過什麼?