다중 단어 값을 분할하고 알파벳 순서로 다시 정렬하는 방법두 문자 약어인 문자 값이 있는 열이 있습니다. 일부는 단일 값이고 다른 일부는 구분 기호 "/"로 구분된 여러 값입니다. 문제는 다중 값 값이 사전순이 아니라는 것입니다.
각 행을 반복하고 다중 값을 분할하고 알파벳 순서로 다시 정렬하고 새 열에 새 "값"을 삽입하고 싶습니다. 단일 값은 그냥 "복사"되어야 하며 null은 null로 남습니다.
이것은 내 머리를 넘어섰고 이 문제를 해결하는 데 도움이 되는 제안 포인터나 읽기 목록에 감사할 것입니다.
감사해요!
현재 데이터 NEW 데이터
AB AB
씨디 씨디
EF EF
CD/AB AB/CD
널 널
EF/AB/CD AB/CD/EF
col = ("Really | Long | and | Boring | Column | Name");
Vals = As Column (col) << Get Values; // Get Values
dt = New Column ("NewAbs", Character, "Nominal" ); //New column for NEW DATA
rows = N rows (dt); // Total number of rows to iterate
for(i = 1 , i <= rows, i++,
if(rowVal (Contains (Vals[i], "/")), // check if is multi-value i.e. AB/DF
rowVal = Words(Vals[i],"/"); // Words will split multi-values at "/"
sval = Sort List(Eval List(rowVal) ); // sort the character values
For(i = 1, i <= N Items (sVal), i++,
newVal = sVal[i];
conCat = Concat Items ( newVal[i] || "/"|| newVal[i+i])
),
Insert Into (dt, conCat[i]),
if(rowVal (!Contains (Vals[i], "/")), // if is NOT multi-value i.e. AB/DF
Insert Into (dt, rowVal[i])),
),
);스크립팅Re: 여러 단어 값을 분할하고 알파벳 순서로 다시 정렬하는 방법이 예는 사전을 사용하는 다른 접근 방식을 보여줍니다.
Names Default To Here( 1 );
theList = {"AB", "AB", "CD", "EF"};
theArray = Associative Array( theList );
theNewList = theArray << Get Keys;
Show( theNewList );Re: 여러 단어 값을 분할하고 알파벳 순서로 다시 정렬하는 방법아니요, 지정된 솔루션 중 어느 것도 중복을 제거하지 않습니다.해당 요구 사항은 원래 요청의 일부가 아닙니다.
Contains() 함수에는 일치 항목이 있는지 확인하기 위해 목록의 항목을 검사하는 기능이 있습니다.나는 그것을 꽤 자주 사용합니다.
Names Default To Here( 1 );
theList = {"AB", "AB", "CD", "EF"};
x = {};
Insert Into( x, theList[1] );
For( i = 2, i <= N Items( theList ), i++,
If( Contains( x, theList[i] ) == 0,
Insert Into( x, theList[i] )
)
);
show(x);
따라서 해야 할 일은 이 코드를 하나 또는 다른 제안된 솔루션에 배치하는 것입니다.
x = :Current data;
If( Contains( x, "/" ) > 0,
theList = Words( x, "/" );
theList = Sort List( theList );
x = {};
Insert Into( x, theList[1] );
For( i = 2, i <= N Items( theList ), i++,
If( Contains( x, theList[i] ) == 0,
Insert Into( x, theList[i] )
)
);
x = Concat Items( x, "/" );
);
x;Re: 여러 단어 값을 분할하고 알파벳 순서로 다시 정렬하는 방법분할 및 정렬 외에도 이 수식은 분할 후 중복된 값을 추가 및 제거하고 반복되지 않는 필드만 유지합니까? 예를 들면 다음과 같습니다.

친애하는.
Re: 여러 단어 값을 분할하고 알파벳 순서로 다시 정렬하는 방법~에게 @txnelson 그리고 @제프_퍼킨슨 귀하의 답변에 감사드립니다. 하나는 루프에 대한 훌륭한 교훈이고 다른 하나는 마음이 흔들리는 한 줄짜리입니다.
JSL 가방에 둘 다 추가하겠습니다.
친애하는.
Re: 여러 단어 값을 분할하고 알파벳 순서로 다시 정렬하는 방법아주 아주 좋은Re: 여러 단어 값을 분할하고 알파벳 순서로 다시 정렬하는 방법개선할 수 있는 경우가 많지 않습니다. @txnelson , 하지만 한 줄 공식으로 줄일 수 있습니다.
Concat Items( Sort List( Words( :Current data, "/" ) ), "/" )
단어() 구분 기호로 "/"를 사용하여 열을 단어로 나누어 단어 목록을 만듭니다.
목록 정렬() 목록을 알파벳순으로 정렬
연결 항목() 항목을 구분하기 위해 "/"를 사용하여 목록의 항목을 단일 문자열로 연결합니다.

Re: 여러 단어 값을 분할하고 알파벳 순서로 다시 정렬하는 방법다음은 샘플 데이터 테이블에서 작동하는 수식입니다.공식이 적용된 데이터 테이블이 첨부되어 있습니다.
If( Contains( :Current data, "/" ) == 0,
x = :Current data,
i = 1;
theList = {};
While( Word( i, :Current data, "/" ) != "",
Insert Into( theList, Word( i, :Current data, "/" ) );
i++;
);
theList = Sort List( theList );
x = theList[1];
For( i = 2, i <= N Items( theList ), i++,
x = x || "/" || theList[i]
);
)