부분 문자열 목록을 이용한 열 검색정의된 부분 문자열 목록에서 값이 일치하는 행을 가져오려고 합니다. 아래 예.
내가 관심 있는 부분 문자열은 "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: 부분 문자열 목록을 사용한 열 검색이를 수용하기 위해 스크립트를 업데이트했습니다.그것은 단지 `.` 와일드카드일 뿐입니다. 와일드카드를 좀 더 구체적으로 지정하고 싶을 수도 있습니다.일반적으로 아무 것도 허용하는 것이 최선은 아닙니다.특히 그것이 당신이 진정으로 원하는 것이 아니라면 더욱 그렇습니다.
Re: 부분 문자열 목록을 사용한 열 검색감사해요 @jthi !
정규식101 환상적인 자원입니다!
Re: 부분 문자열 목록을 사용한 열 검색나는 당신이 말한 대로 정확히 할 것이라고 생각합니다.keys_list를 반복하거나 "와일드" 카드 문자를 사용하여 거기에 입력하십시오(정규식의 경우 . 작동해야 함). 편집: . 너무 많은 문자가 일치할 수 있으므로 허용되는 문자열을 모두 포함하는 문자열을 만드는 것이 더 좋습니다. . 정규식 소스가 하나 더 있습니다. 정규식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 , @txnelson , @vince_faller 솔루션을 제공해 주셔서 감사합니다! 실제로 한 가지 시나리오를 더 언급하는 것을 잊었습니다. keys_list의 두 번째 요소는 공백 구분 기호로 구분된 두 단어인 "aa bb"입니다. 제가 작업 중인 데이터 세트에는 구분 기호가 다른 특수 문자인 경우가 있을 수 있습니다. 예를 들어 값이 "aa-bb"인 12번째 행이 있는 경우 해당 행도 호출되어 최종 결과는 [1,2,4,5,7,8,11]이 됩니다. ,12].
이를 설명하려면 스크립트를 어떻게 업데이트해야 합니까? key_list의 모든 구분 기호 패턴을 특수 문자에 대한 정규식 코드로 바꾸는 단계가 있어야 한다고 생각합니다.
Re: 부분 문자열 목록을 사용한 열 검색@jthi , @txnelson , @vince_faller 솔루션을 제공해 주셔서 감사합니다!
실제로 한 가지 시나리오를 더 언급하는 것을 잊었습니다. keys_list의 두 번째 요소는 공백 구분 기호로 구분된 두 단어인 "aa bb"입니다. 제가 작업 중인 데이터 세트에는 구분 기호가 다른 특수 문자인 경우가 있을 수 있습니다. 예를 들어 값이 "aa-bb"인 12번째 행이 있는 경우 해당 행도 호출되어 최종 결과는 [1,2,4,5,7,8,11]이 됩니다. ,12].
이를 설명하려면 스크립트를 어떻게 업데이트해야 합니까? key_list의 모든 구분 기호 패턴을 특수 문자에 대한 정규식 코드로 바꾸는 단계가 있어야 한다고 생각합니다.
Re: 부분 문자열 목록을 사용한 열 검색@jthi , @vince_faller , @txnelson . 감사해요! 이것은 훌륭한 솔루션입니다!
사실, 제가 작업 중인 데이터에서 볼 수 있는 시나리오를 하나 더 포함하는 것을 잊어버렸습니다. keys_list의 두 번째 항목은 공백 구분 기호로 구분된 두 단어인 "aa bb"입니다. 내 데이터 세트에는 단어가 다른 특수 문자로 구분되는 경우가 있을 수 있지만 여전히 포함하고 싶습니다. 예를 들어 값이 "aa-bb"인 12번째 행이 있는 경우 해당 행도 호출하고 싶습니다. 따라서 최종 결과는 [1,2,4,5,7,8,11,12입니다. ]
이를 수용하기 위해 스크립트를 업데이트하는 방법은 무엇입니까? key_list의 모든 구분 기호가 정규 표현식에 의해 패턴으로 인식될 수 있는 특수 문자에 대한 특수 코드로 대체되는 단계가 있는 것 같아요.
도와 주셔서 감사합니다!
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: 부분 문자열 목록을 사용한 열 검색이 문제를 해결하기 위한 나의 접근 방식은 다음과 같습니다.
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: 부분 문자열 목록을 사용한 열 검색나는 여기서 이와 같은 정규 정규식을 사용할 가능성이 높습니다. 너무 느리면 좀 더 복잡한 생각이 들 수도 있겠네요
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];