你好,
我对 JMP 脚本编写还不太熟悉,我正在尝试编写一个脚本,该脚本能够从字符串中提取特定数字并为每个数字创建新列。每个数字始终跟在字符“DX”或“DY”后面,例如:
D113U_NTCH_CM_MEAS_CD_SEM_{2UM_X6_NTCH_CM_IMAGE}_DX7DY11SDX11SDY15_2024-12-06_18-57-42.jpg
我想要提取并创建以下列:

当然,我想对整个数据列重复此过程。如果您有任何建议,我将不胜感激。谢谢!
您是否事先知道所有可能的模式(DX、DY、....)?它是否总是位于同一位置(}_ 之后和日期之前)?
如果我有一列全是这些文件名,我会执行 Cols -> Recode,左上角的红色三角形 -> “替换字符串”,然后输入“S?D[XY](\d+)”并在“使用正则表达式”打开的情况下将其替换为“%\1%”。然后,您可以拆分列(Cols -> Utilities -> Text to Columns...”)并输入“%”,这将为您提供 6 个新列,前缀为 DX、DY、SDX、SDY 和后缀,例如:
| 列 1 2 | 第 1 3 列 | 第 1 列 4 | 第 1 列 5 | 第 1 列 6 | 第 1 列 7 |
| D113U_NTCH_CM_MEAS_CD_SEM_{2UM_X6_NTCH_CM_IMAGE}_ | 7 | 11 | 11 | 15 | _2024-12-06_18-57-42.jpg |
然后您可以将列重命名为 DX、DY 等。
如果您的实际数据更复杂,这个过程可能也需要更复杂一些。
这是另一种方法。
给定数据表

下面的脚本将直接创建

Names Default To Here( 1 );
// Create and example data table
dt = New Table( "Example",
Add Rows( 1 ),
New Column( "File",
Character,
"Nominal",
Set Values(
{
"D113U_NTCH_CM_MEAS_CD_SEM_{2UM_X6_NTCH_CM_IMAGE}_DX7DY11SDX11SDY15_2024-12-06_18-57-42.jpg"
}
)
)
);
// Add the new columns to the data table
dt << New Column( "DX" );
dt << New Column( "DY" );
dt << New Column( "SDX" );
dt << New Column( "SDY" );
For Each Row(
// Separate the section of the File name into just the DX,DY,SDX,SDY part
string = Word( 1, Substr( :file, Contains( :file, "_DX" ) + 1 ), "_" );
// Change the string into a assignment statements
Substitute Into( string, "SDX", ";:SD_X=", "SDY", ";:SD_Y=", "DX", ";:D_X=", "DY", ";:D_Y=", "_", "" );
string = Substr( string, 2 ) || ";";
// Execute the assignment statements
Eval( Parse( string ) );
);