你好,
我是 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;