打开多个文件我想打开多个测量文件并将它们连接到一个文件中。
不幸的是,由于文件的标题很奇怪,使用起来并不简单导入多个文件...
因此,我设置了一个 for 循环并通过 open() ... 加载每个文件,一个一个地处理它,然后将它们连接起来。
for( open(...)) 与 MFI 相比慢了多少,这令人惊讶。
我尝试过的一些技巧:
- 加载所有文件,连接一次 --> 帮助
- 选项“invisible”(去除表更新)--> 很有帮助
但仍然没有机会达到 MFI 的性能。
还有什么技巧吗?
它应该有助于使用 MFI(不堆叠),然后分别处理数据表并将它们连接起来。
是否有命令告诉 MFI 打开文件无形的?
数据访问回复:打开多个文件- 似乎是一些不错的愿望清单项目:一个更激进的连接选项,一个不可见的选项。
- 尝试最小化表格
- 尝试 <<开始数据更新
- MFI 也有一个比 open() 使用更快的 CSV 阅读器。 但是如果您可以使用指定足够信息的源脚本来防止对数据进行额外扫描,那么使用 open 仍然可以很快。 或者尝试使用 MFI 导入单个文件。
- MFI 使用多线程。 如果您正在查看时间分钟(而不是秒), JMP 可以运行 JMP 吗?可能是您一次运行多个 open() 所需要的。 目前还不清楚你花在让它工作上的时间是否会得到回报,以及维护其他人的噩梦。
回复:打开多个文件我已经编写了一个插件,它使用一些其他选项来执行此操作,并且仅依靠 MFI 的功能工作。 我没有在社区上分享它,因为我需要从中删除一些公司特定的项目。 这可能会促使人们分享我多年来学到的东西 
无论如何,你可以使用 MFI,我所做的基本上是创建一个文件名列表(通过选择文件或目录中的文件)所以我有一个单一的路径和该路径的文件名列表,然后将它们传递到MFI 命令。
然后我检查输出,如果它超过 1 个文件,我将强制连接。 这是一个片段
filter = ConcatItems(fileList,";");
filesImported1 = Multiple File Import(
<<SET folder=""></SET>
过滤器基本上是文件名列表,但以“;”分隔
回复:打开多个文件这样的事情可能会奏效。
// use MFI to stack a mixed bag of tables...
// assumes "text" and "file name" are not columns in the data AND assumes
// no commas in the data values. Not sure how you would work around that.
dir = "$temp/testfiles/"; // make sample files here
Delete Directory( dir );
Create Directory( dir );
Save Text File( dir || "a.csv", "a,b,c\!n1,2,3\!n-1,-2,-3" );
Save Text File( dir || "b.csv", "junk\!nc,b,a,e\!n3,4,5,98\!n-1,-2,-3,-4" );
Save Text File( dir || "c.csv", "junk\!njunk\!nb,d,a,c\!n6,99,7,8\!n-1,-2,-3,-4" );
dtList = Multiple File Import(
<<SET folder=""></SET>
cleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned upcleaned up清理干净
现在你必须决定哪些列是数字......
回复:打开多个文件你好@nathan-clark .
谢谢你的片段。
关于这里讨论的应用案例,在合并文件之前,需要在文件级别进行一些预处理。
因此,我更愿意使用选项加载文件
<<SET stack="" mode=""></SET>
在我的系统 (Jmp 17.1) 上,Jmp 开始显示 100 多个表前它对
<< show window(0);
这是因为:
@hogi写道:是否有命令告诉 MFI 打开文件无形的?
回复:打开多个文件好的,这更有意义。 我明白你在说什么......
唯一能让它快一点的是如果你私下而不是不可见地打开文件。 这是一个相当快速的升级……但不确定它是否会与 MFI 的速度相匹配。 我发现即使在私有时,JMP 也可以对文件执行大部分操作,并且它大大减少了 RAM 需求......您只需要在测试时注释掉私有,否则您最终会寻找您看不到的测试表:)
希望 JMP 可以进一步改善 MFI。
回复:打开多个文件@nathan-clark ,非常感谢,私人的使它大约快 2 倍 
@nathan-clark写道:希望 JMP 可以进一步改善 MFI。
是的,一个无形的(甚至私人!)MFI 中的选项
https://community.jmp.com/t5/JMP-Wish-List/Private-option-for-Import-Multiple-Files/idc-p/632087#M42...
将成为 GameChanger!
对我来说足够的选择:
- 在 Open 中使用私人模式并小睡片刻
- 检查我是否设法适应@Craige_Hales下面针对我们的文件类型的解决方案。
- 等待无形的Jmp 18 中的选项 
回复:打开多个文件谢谢@Craige_Hales - 许多非常好的想法可以复制!
不幸的是,
// transfer data from text to unique cols.<BR />...
相当慢...
这里有一个例子——在我的系统上,加载数据需要一秒钟,转换数据需要 10 秒钟……
查看更多...
回复:打开多个文件很好,数据表矩阵列的设置非常陡峭。 这种方式对所有 40 行使用一个设置,而不是对每一行使用一个设置。 (见温度列表。)我认为大类测试用例要好 4 倍:
// use MFI to stack a mixed bag of tables...
// assumes "text" and "file name" are not columns in the data AND assumes
// no commas in the data values. Not sure how you would work around that.
dir = "$temp/testfiles/"; // make sample files here
Open( dir );
Delete Directory( dir );
Create Directory( dir );
dt0 = Open( "$SAMPLE_DATA/Big Class.jmp" );
For Each( {i, idx}, 1 :: 300,
dt0:height[1] = 1000 + i;
dt0 << Save( dir || Char( 1000+i ) || ".csv" );
);
t1 = HP Time();
dtList = Multiple File Import(
<<SET folder=""></SET>
(t2 - t1) / 1000000 = 2.105032;
(t3 - t2) / 1000000 = 2.65675;
回复:打开多个文件这个怎么样:
- 使用超快的 MFI-Import(带 csv 选项)
- 通过 Subset(private) 分隔输入文件
- 对数据进行后处理以获得有意义的列名[这里只是一个移动]
- 连接文件
// use MFI to stack a mixed bag of tables...
// assumes "text" and "file name" are not columns in the data AND assumes
// no commas in the data values. Not sure how you would work around that.
// then splits the data via Subset(private)
// ... some postprocessing ...
// and then concatenate the files
dir = "$temp/testfiles/"; // make sample files here
open(dir);
Delete Directory( dir );
Create Directory( dir );
dt0 = Open( "$SAMPLE_DATA/Big Class.jmp" );
Foreach ({i,idx},1::300,
dt0 << Save( dir || char(i)||".csv" ));
t1=HPtime();
dtList = (Multiple File Import(
<<SET folder=""></SET>
回复:打开多个文件通过在临时列表中收集数据并块写入数据表,这是多么大的改进啊!
好的!
谢谢@Craige_Hales
回复:打开多个文件在撰写愿望清单帖子时,我找到了相关愿望 - 并在那里添加了链接:
隐形:已经有打开文件的愿望私人的选项(从 2022 年起):
导入多个文件的私有选项
积极的串联(从 2020 年开始):
多个文件导入 - 强制合并
因此,幸运的是,它们已经在 Jmp 的下一版本中实现了:)