文字列のセグメントに基づいてパターンを選択する方法やあ、
私はJSLの新しいユーザーです。 多数のピンをグループ化し、それらのグループに新しい列を追加するために、JSL を使用することを考えています。 最初の連続する文字 (例: DDR0CH0CKN...) に対してそれを行う方法を知りました。 DDR0 を使用してフィルタリングする方法は知っています...) しかし、'DDR0' や 'CK' などのセグメントを使用してそれを行う場合、効率的な方法は何でしょうか?
参考までに: 1 つの方法は、手動で作成したファイルを使用し、更新コマンドを使用してピンをピン グループに一致させることです (効率的な方法ではありません)。 patMatch/regex などを試しましたが、思い通りの結果が得られませんでした。
便宜上、ピン用の「Desired_Pin_Group」という列が必要な .jmp ファイルを添付しました。
ご協力ありがとうございます。
よろしく、
ハフィズ。
Re: 文字列のセグメントに基づいてパターンを選択する方法ハフィズ、
お客様の問題解決のお手伝いができたことを嬉しく思います。
Re: 文字列のセグメントに基づいてパターンを選択する方法こんにちは。
あなたが提供した条件文の概念を使用して、私の問題を解決できました。 小文字に変換するのではなく、テーブルに新しい列を追加し、次のように括弧を使用してピン名を直接入力しました。
dt <方式(
If(Contains(:Pin, "_CK")>0 & Contains(:Pin,"DDR0") & Contains(:Pin, "_CKE")==0,"ddr0_clk",
Contains(:Pin, "_CK")>0 & Contains(:Pin,"DDR1") & Contains(:Pin, "_CKE")==0,"ddr1_clk",
しかし、私はそれを問題の解決策として受け入れています。
ご協力いただきありがとうございます。
よろしく、
ハフィズ。
Re: 文字列のセグメントに基づいてパターンを選択する方法JMP は、パターンマッチングここで役立つと思われる一連の関数と構造体。 見るヘルプ>書籍>スクリプトガイド. 次に、本でこのセクションを検索します。
Re: 文字列のセグメントに基づいてパターンを選択する方法早速の対応、ありがとうございました。 スクリプトは、以前に提供した .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) の間の識別基準はさらに複雑です。 最後のフレーズを検索する必要があります。
どうぞよろしくお願いいたします。
ハフィズ。
Re: 文字列のセグメントに基づいてパターンを選択する方法あなたが与えた例を考えると、あなたが望むことをするスクリプトは次のとおりです。例外処理が必要なピンの組み合わせがもっと多い場合、これはこれを処理する最善の方法ではない可能性があります。
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;