複数の単語の値を分割してアルファベット順に並べ替える方法2 文字の略語である文字値を含む列があります。 単一の値もあれば、区切り文字「/」で区切られた複数の値もあります。 問題は、複数値の値がアルファベット順になっていないことです。
各行を繰り返し処理し、複数の値を分割してアルファベット順に並べ替え、新しい「値」を新しい列に挿入したいと考えています。 単一の値は「コピー」するだけで、null は null のままにする必要があります。
これは私の頭をはるかに超えています。これを修正するのに役立つ提案ポインターや読書リストをいただければ幸いです。
ありがとう!
現在のデータ NEW データ
AB AB
CD CD
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と@ジェフ・パーキンソンご回答ありがとうございます。 1 つはループに関するすばらしい教訓であり、もう 1 つは気が遠くなるようなワンライナーです。
両方とも JSL のバッグに追加します。
よろしくお願いします。
Re: 複数の単語の値を分割してアルファベット順に並べ替える方法とってもとっても素敵Re: 複数の単語の値を分割してアルファベット順に並べ替える方法私が改善できることはめったにありません@txnelson 、しかし、私はそれを1行の式にまとめることができます:
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]
);
)