부분 문자열 목록을 사용한 열 검색부분 문자열의 정의된 목록에서 값이 일치하는 행을 가져오려고 합니다. 아래 예.
내가 관심있는 부분 문자열은 "aaa" 또는 "aa bb"입니다. 아래 JSL로 시작했습니다. 이상적으로 결과는 [1,2,4,5,7,8,11]입니다. 아래 스크립트는 마지막 스크립트(11)를 제외한 모든 것을 얻을 수 있었습니다. 그럼에도 불구하고 아마도 내가 가지고 있는 것보다 더 우아한 솔루션이 있을 것입니다. 도움을 주셔서 감사합니다!

names default to here(1);
keys_list = {"aaa", "aa bb"};
dt = current data table();
Row_list = dt <<GET rows="" where=""></GET>스크립팅Re: 부분 문자열 목록을 사용한 열 검색나는 아마도 이와 같은 정규식을 여기에서 사용할 것입니다. 너무 느려지면 더 복잡한 생각을 하게 될지도 몰라
Names Default To Here(1);
keys_list = {"aaa", "aa bb"};
dt = Current Data Table();
regex_pattern = "(" || Concat Items(keys_list, "|") || ")";
row_list = [];
For Each Row(dt,
If(!IsMissing(Regex(lowercase(:TEST), regex_pattern)),
Insert Into(row_list, Row())
);
);
show(row_list); //row_list = [1, 2, 4, 5, 7, 8, 11];Re: 부분 문자열 목록을 사용한 열 검색이 문제를 해결하기 위한 내 접근 방식은 다음과 같습니다.
names default to here(1);
keys_list = {"aaa", "aa bb"};
dt = current data table();
row_list=[];
For( i = 1, i <= N Rows( dt ), i++,
For( k = 1, k <= N Items( keys_list ), k++,
If( Contains( :test[i], keys_list[k] ),
row_list = row_list || Matrix( i );
Break();
)
)
);
show(sort ascending(Row_list));Re: 부분 문자열 목록을 사용한 열 검색@jthi , @txnelson , @vince_faller 솔루션에 감사드립니다! 실제로 시나리오를 하나 더 언급하는 것을 잊었습니다. keys_list의 두 번째 요소는 공백 구분 기호로 구분된 두 단어인 "aa bb"입니다. 내가 작업 중인 데이터 세트에는 구분 기호가 다른 특수 문자인 경우가 있을 수 있습니다. 예를 들어 값이 "aa-bb"인 12번째 행이 있는 경우 해당 행도 호출하여 [1,2,4,5,7,8,11 ,12].
이 또한 고려하려면 스크립트를 어떻게 업데이트해야 합니까? keys_list의 모든 구분 기호 패턴을 특수 문자에 대한 정규식 코드로 대체하는 단계가 있어야 한다고 생각합니다.
Re: 부분 문자열 목록을 사용한 열 검색나는 당신이 말한대로 정확하게 할 것이라고 생각합니다. keys_list를 반복하거나 "와일드"카드 문자로 거기에 입력하십시오(regex의 경우 작동해야 함). 편집: 사용 . 너무 많은 다른 문자가 일치할 수 있으므로 허용된 모든 문자열을 포함하는 문자열을 빌드하는 것이 가장 좋습니다. . 정규식에 대한 또 다른 소스 정규식101
Names Default To Here(1);
keys_list = {"aaa", "aa bb"};
new_keys_list = Transform Each({new_key}, keys_list, Substitute(new_key, " ", "."));
dt = Current Data Table();
regex_pattern = "(" || Concat Items(new_keys_list, "|") || ")";
row_list = [];
For Each Row(dt,
If(!IsMissing(Regex(lowercase(:TEST), regex_pattern)),
Insert Into(row_list, Row())
);
);
show(row_list); //row_list = [1, 2, 4, 5, 7, 8, 11];
@vince_faller 나는 그것에 대해 뭔가를 본 것을 기억한다고 생각하지만 적어도 JMP16에서는 IsMissing()이 문자열과 함께 작동하는 경우와 어떤 함수인지 더 이상 확실하지 않습니다. 아마도 "a" == 와 같은 비교를 사용했을 것입니다. 오류가 발생하기 때문입니다.

Re: 부분 문자열 목록을 사용한 열 검색감사 해요 @jthi !
정규식101 환상적인 리소스입니다!
Re: 부분 문자열 목록을 사용한 열 검색열 수식에서 수행하려는 경우
Names default to here(1);
dt = current data table();
dt << Add Rows({:Test = "aa-bb"});
dt << New Column("Match", Formula(isstring(Regex(:TEST, "(aaa)|(aa.bb)", "\0", IGNORECASE))));
dt << Run Formulas(); // just to make sure the formula runs
match_rows = loc(dt:Match << Get Values());
dt << Delete Columns(:Match);
show(match_rows); // match_rows = [1, 2, 4, 5, 7, 8, 11];
여기 정규식 리소스 나는 당신이 그것을 잘 모른다면 좋아합니다.
또한 @jthi `ismissing()`이 문자열에서 작동하는 데 사용되지 않았습니까?나는 그것이 항상 내 정규식을 죽이는 것을 기억합니다 (따라서 여기서 `isstring()`을 사용한 이유).14.3으로 다시 시도했지만 괜찮은 것 같습니다.
*수정*은 와일드카드를 만들었습니다.
Re: 부분 문자열 목록을 사용한 열 검색이를 수용하기 위해 스크립트를 업데이트했습니다.'.' 와일드카드일 뿐입니다. 와일드카드에 대해 더 구체적으로 지정할 수 있습니다.그냥 아무거나 허용하는 것은 일반적으로 최선이 아닙니다.특히 그것이 당신이 진정으로 원하는 것이 아니라면.