字符串转数据表(代码优化)循环中的 .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 />
你试过什么?