你好,
我是 JSL 的新用户。 为了对大量引脚进行分组并为这些组添加新列,我正在考虑使用 JSL。 我开始知道如何为第一个连续字符(例如 DDR0CH0CKN ...... 我知道如何使用 DDR0 过滤它......)但是如果我要使用像“DDR0”和“CK”这样的段来做到这一点,那么这样做的有效方法是什么?
仅供参考:我知道,一种方法是使用手动创建的文件,然后使用更新命令将引脚与引脚组匹配(不是一种有效的方式)。 我尝试了 patMatch/regex 等,但无法获得所需的结果。
为了您的方便,我附上了 .jmp 文件,我希望在其中有一个名为“Desired_Pin_Group”的列用于引脚。
感谢您的合作。
问候,
哈菲兹。
嗨,txnelson,
我使用了您提供的条件语句的概念,可以解决我的问题。 我没有转换为小写,而是在表中添加了一个新列,并使用括号直接输入引脚名称,如下所示:
dt <公式(
If(Contains(:Pin, "_CK")>0 & Contains(:Pin,"DDR0") & Contains(:Pin, "_CKE")==0,"ddr0_clk",
包含(:Pin, "_CK")>0 & 包含(:Pin,"DDR1") & 包含(:Pin, "_CKE")==0,"ddr1_clk",
但是,我接受它作为解决问题的方法。
谢谢你的帮助。
问候,
哈菲兹。
JMP 提供了一个完整的模式匹配您可能会在此处发现有用的功能和构造套件。 看帮助>图书>脚本指南. 然后在书中搜索此部分。
谢谢你快速的回复。 该脚本对于我之前提供的 .jmp 文件来说非常好。 但是,不幸的是,这并不是那么简单。 引脚数在 150-200 的范围内,它们被分组在 15-20 组内。 请看一下新附上的.jmp 文件,它更接近真实场景。 看看22-27和81-83。 这 2 个组有共同的 DDR_Y,但它们是根据字符串中的其他短语过滤的。 逻辑类似于:if :Pin=='DDR_Y' && Pin != NC :Desired_Pin_Group=ddr_dq_ch0 else :Desired_Pin_Group=ddr_ctrl。 组 (81-83) 和 (93-96) 之间的区分标准更加复杂。 需要搜索最后的短语。
非常感谢您的合作。
哈菲兹。
鉴于您给出的示例,这是一个可以执行您想要的操作的脚本。如果您有更多需要异常处理的引脚组合,这可能不是处理此问题的最佳方法。
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Generated Pin Group", character );
For Each Row(
// Get the first part of the group name
First = Lowercase( Substr( :Pin, 1, 4 ) );
// Handle exceptions like the below case
If( First == "ddrr",
First = "ddr0"
);
// Now attach the "_"
First = First || "_";
// Now add the second part based upon the given complexities
// Handle the clk
If(
Contains( :Pin, "_CK" ) > 0 & Contains( :Pin, "_CKE" ) == 0, First = First || "clk",
// Handle the vref
Contains( :Pin, "_VREF" ) > 0, First = First || "vref",
// Handle the cke
Contains( :Pin, "_CKE" ) > 0, First = First || "cke",
// Handle the reset
Contains( :Pin, "RESET" ) > 0, First = First || "Reset"
);
:Generated Pin Group = First;
);
如果您想将此作为列的公式,只需简单的更改
First = Lowercase( Substr( :Pin, 1, 4 ) );
If( First == "ddrr",
First = "ddr0"
);
First = First || "_";
If(
Contains( :Pin, "_CK" ) > 0 & Contains( :Pin, "_CKE" ) == 0,
First = First || "clk",
Contains( :Pin, "_VREF" ) > 0, First = First || "vref",
Contains( :Pin, "_CKE" ) > 0, First = First || "cke",
Contains( :Pin, "RESET" ) > 0, First = First || "Reset"
);
First;