你好,
我是 JMP 的新手,希望自动执行以下非常具有挑战性的操作,最好是通过自动化 JMP 脚本或您专家可能推荐的任何其他解决方案:)。
我的数据:
我有两个结果文件夹,datafolder1 和 datafolder2。 从技术上讲,它们是相同的测量值,设置略有不同,更改前后会重复相同的测量值。
每个文件夹有多个.txt 文件,这些文件是.txt 表格格式的结果文件。 每个文件夹的 .txt 文件名称相同,列名也相同。 实际上,每个文件只有数字数据略有不同。
我想要的是:
我想以图形方式比较具有相同名称 .txt 的每一列的结果数据文件夹 1 与结果数据文件夹 2 的差异,并生成结果的 .pdf 输出。 我设法以 .pdf 格式生成了我想要的输出,但必须进行 8-12 小时的手动工作才能使用图形生成器获得该输出。 输出文件称为“wanted_output.pdf”。 现在我还有许多其他类似的案例要做,手动完成这件事需要几个月的时间。
数据文件作为附件。 [数据已被删除]
提前谢谢您,几个月来一直在为这个问题苦苦挣扎,我希望 JMP 有简单的解决方案!
嗨 txnelson 和伊恩
奇迹般有效! 谢谢!
我不得不将 datafolder2 变量从 folder1 更改为 folder2。
同样出于某种原因,.pdf 打印的缩放比例不佳,我不得不更改默认打印设置文件 => 页面设置。
问题已解决,感谢大家的帮助!
附言。 我不得不从第一篇文章中删除数据,但从技术上讲,任何前后类型的数据文件夹都适用于此脚本。
而且,作为替代@txnelson的方法,并遵循最初的想法(并使用“包含子文件夹”选项):
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 社区给我发私信吗? 我可以通过电子邮件提供更轻松的帮助,然后我们可以在此处发布最终解决方案。
谢谢 Jarmo 的快速回复!
我确实需要一个 JSL 来完成这一切,对于其他多个案例来说这样做太耗时了。
在架构视图中,遵循 JSL 可以锻炼:
1.从两个文件夹中导入所有文件。
2.加入/&将结果连接到一个文件中,JMP 似乎会在表名相同(XXXX)时自动添加某种索引。
3. 按字母顺序对列名进行排序。
4. 将第 1 和 2 列绘制成一个图,将第 3 和 4 列绘制为下一个图,将第 5 和 6 列绘制为下一个图...重复绘制以下数字,直到没有剩余的列。
听起来很简单,但我对 JSL 只有初学者的了解,每个步骤有什么提示和示例吗?
文件/导入多个文件可以让你很容易地开始。 导入文件时,您必须对默认设置进行一些更改(将分隔符从逗号更改为制表符)。
从这一点开始,您可以开始加入数据表。 我不确定是否有任何简单的方法可以做到这一点,除了 JSL 和循环遍历您刚刚从上一步获得的数据表列表。
对两个文件夹重复此过程,然后将数据表连接在一起,最后使用图形生成器创建图形(您可能需要在创建图形之前堆叠数据)。