문자열 세그먼트를 기반으로 패턴을 선택하는 방법안녕,
저는 JSL의 새로운 사용자입니다. 많은 수의 핀을 그룹화하고 해당 그룹에 대해 새 열을 추가하기 위해 JSL을 사용할 생각입니다. 첫 번째 연속 문자에 대해 그렇게하는 방법을 알게되었습니다 (예 : DDR0CH0CKN의 경우 ... DDR0을 사용하여 필터링하는 방법을 알고 있습니다...) 하지만 'DDR0' 및 'CK'와 같은 세그먼트를 사용하여 필터링하려면 어떻게 하는 것이 효율적인가요?
참고: 한 가지 방법은 수동으로 생성된 파일을 사용한 다음 업데이트 명령을 사용하여 핀을 핀 그룹에 일치시키는 것입니다(효율적인 방법이 아님). patMatch/regex 등을 시도했지만 원하는 결과를 얻을 수 없습니다.
편의를 위해 핀에 대해 "Desired_Pin_Group"이라는 열이 있어야 하는 .jmp 파일을 첨부했습니다.
협조해 주셔서 감사합니다.
문안 인사,
하피즈.
Re: 문자열 세그먼트를 기반으로 패턴을 선택하는 방법하피즈,
귀하의 문제를 해결하는 데 도움이 되었다니 기쁩니다.
Re: 문자열 세그먼트를 기반으로 패턴을 선택하는 방법안녕하세요 txnelson님
나는 당신이 제공하고 내 문제를 해결할 수 있는 조건문의 개념을 사용했습니다. 소문자로 변환하는 대신 테이블에 새 열을 추가하고 다음과 같이 괄호를 사용하여 직접 핀 이름을 입력했습니다.
dt <<새 열("Match_Pin_Grp", 문자, 공칭,
공식(
If(Contains(:Pin, "_CK")>0 & Contains(:Pin,"DDR0") & Contains(:Pin, "_CKE")==0,"ddr0_clk",
포함(:핀, "_CK")>0 및 포함(:핀,"DDR1") 및 포함(:핀, "_CKE")==0,"ddr1_clk",
그러나 나는 그것을 문제의 해결책으로 받아들이고 있습니다.
당신의 도움을 주셔서 감사합니다.
문안 인사,
하피즈.
Re: 문자열 세그먼트를 기반으로 패턴을 선택하는 방법JMP는 전체 패턴 매칭 여기에서 유용하게 사용할 수 있는 함수 및 구문 모음입니다. 보다 돕다 > 서적 > 스크립팅 가이드 . 그런 다음 책에서 이 부분을 검색하십시오.
Re: 문자열 세그먼트를 기반으로 패턴을 선택하는 방법빠른 응답에 감사드립니다. 스크립트는 이전에 제공한 .jmp 파일에 대해 꽤 괜찮습니다. 그러나 불행히도 그것은 그렇게 간단하지 않습니다. 핀의 수는 150-200개의 범위에 있으며 15-20개의 그룹 내에서 그룹화됩니다. 새로 첨부된 .jmp 파일을 보시면 실제 상황에 더 가깝습니다. 22-27과 81-83을 보십시오. 이 두 그룹은 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;