你好,
我对 JMP 相当陌生,希望自动执行以下极具挑战性的操作,最好通过自动化 JMP 脚本或您专家可能推荐的任何其他解决方案:)。
我的数据:
我有两个结果文件夹:datafolder1 和 datafolder2。 从技术上讲,它们是相同的测量结果,设置方面存在细微差别,并且在更改前后重复相同的测量结果。
每个文件夹都有多个.txt 文件,这些文件是.txt 表格式的结果文件。 每个文件夹的 .txt 文件具有相同的名称,并且列名称也相同。 实际上,每个文件只有数字数据略有不同。
我想要的是:
我想以图形方式比较结果 datafolder1 与结果 datafolder2 中具有相同名称 .txt 的每一列的差异,并生成结果的 .pdf 输出。 我设法生成了我想要的 .pdf 格式的输出,但必须花费 8-12 小时的手动工作才能使用图形生成器获得该输出。 输出文件称为“wanted_output.pdf”。 现在我还有很多其他类似的案例要做,而手动完成这件事需要几个月的时间。
数据文件作为附件。 [数据已被删除]
预先感谢您,几个月来一直在解决这个问题,我希望 JMP 能为此提供简单的解决方案!
嗨特克斯尼尔森和伊恩
奇迹般有效! 谢谢你!
我必须将 datafolder2 变量从folder1更改为folder2。
另外由于某种原因 .pdf 打印不能很好地扩展,我不得不更改默认打印设置 File=>Page setup。
问题解决了,谢谢大家帮忙!
附言。 我必须从第一篇文章中删除数据,但从技术上讲,任何之前和之后类型的数据文件夹都可以使用此脚本。
并且,作为替代方案@tx尼尔森的方法,并遵循最初的想法(并使用“包含子文件夹”选项):
NamesDefaultToHere(1);
// Unzip the example file 'net_data.zip' to your Desktop
// Generated via 'File > Open Multiple..': tabList is a list of 'paired' tables
// that are built automatically according to the commonality of column names
tabList =
Multiple File Import(
<<SET folder=""></SET>
像往常一样,最终结果的完整性取决于您可以(和不能)假设数据的规律性。
我不得不猜测一些事情,但下面的脚本为数据表文件夹中找到的每个文件创建一个单独的 pdf。我稍微修改了图表格式。正如我所能确定的,它显示了所有相同的信息,但形式略有不同。
在脚本中,您需要输入文件夹 1 和文件夹 2 的路径。当前,pdf 保存在 $TEMP 目录中。您需要将它们更改为真实的文件夹。
Names Default To Here( 1 );
// Set folder1 and folder2 paths
folder1 = "path to folder 1";
folder2 = "path to folder 2";
// Get files in datafolder 1 folder
fileNamesList = Files In Directory( folder1 );
For( File = 1, File <= N Items( fileNamesList ), File++,
// Open the file in datafolder1
dt1 = Open(
folder1 || "/" || fileNamesList[File],
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
// New column: Index
dt1 << New Column( "Index", Numeric, "ordinal", Format( "Best", 12 ), Set Each Value( Row() ) );
// New column: Index
dt1 << New Column( "Measured", Character, Set Each Value( "Before" ) );
// Open the file in datafolder2
dt2 = Open(
folder1 || "/" || fileNamesList[File],
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
// New column: Index
dt2 << New Column( "Index", Numeric, "Ordinal", Format( "Best", 12 ), Set Each Value( Row() ) );
// New column: Index
dt2 << New Column( "Measured", Character, Set Each Value( "After" ) );
// Concatenate tables
// → Data Table( "HW.DiodeTest.ADP_diodes" )
dt1 << Concatenate( dt2, Append to first table );
// Close the After data table
Close( dt2, nosave );
// get all continuous columns in the data table
colNamesList = dt1 << get column names( continuous, string );
theJournal = New Window( fileNamesList[File], <<JOURNAL></JOURNAL>
您可以在 JMP 社区给我发送私人消息吗? 我可以通过电子邮件提供更轻松的帮助,然后我们可以在这里发布最终的解决方案。
谢谢贾莫的快速回复!
我确实需要一个 JSL 来完成这一切,对于其他多种情况来说这样做太耗时了。
从架构的角度来看,遵循 JSL 可以锻炼:
1.导入两个文件夹中的所有文件。
2.加入/&将结果连接到一个文件中,当表名相同(XXXX)时,JMP 似乎会自动添加某种索引。
3. 按字母顺序对列名称进行排序。
4. 将第 1 列和第 2 列绘制为一个图,将第 3 列和第 4 列绘制为下一个图,将第 5 列和第 6 列绘制为下一个图...重复绘制以下数字,直到没有剩余的列。
这一切听起来很简单,但我对 JSL 只有初学者的了解,每个步骤有什么提示和示例吗?
文件/导入多个文件可以让您相当轻松地开始。 导入文件时,您必须对默认设置进行一些更改(将分隔符从逗号更改为制表符)。
从此时起,您可以开始加入数据表。 我不确定除了 JSL 和循环刚刚从上一步获得的数据表列表之外是否有任何简单的方法可以做到这一点。
对两个文件夹重复此过程,然后将数据表连接在一起,最后使用图形生成器创建图形(您可能需要在创建图形之前堆叠数据)。