Comment diviser les valeurs de plusieurs mots et les réorganiser par ordre alphabétiqueJ'ai une colonne avec des valeurs de caractères qui sont des abréviations de deux lettres. Certaines sont des valeurs uniques et d'autres sont des valeurs multiples séparées par le délimiteur "/". Le problème est que les valeurs multi-valeurs ne sont pas dans l'ordre alphabétique.
Je veux parcourir chaque ligne et diviser les multi-valeurs et les réorganiser par ordre alphabétique et insérer la nouvelle "valeur" dans une nouvelle colonne. Les valeurs uniques doivent être simplement "copiées" et les valeurs nulles laissées comme nulles.
C'est bien au-dessus de ma tête et j'apprécierai toutes les suggestions de pointeurs ou de listes de lecture pour m'aider à résoudre celui-ci.
Merci!
Données actuelles NOUVELLES données
AB AB
CDCD
EF EF
CD/AB AB/CD
null Null
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])),
),
);ScriptRe : Comment diviser plusieurs mots-valeurs et les réorganiser par ordre alphabétiqueCet exemple illustre une autre approche utilisant des dictionnaires :
Names Default To Here( 1 );
theList = {"AB", "AB", "CD", "EF"};
theArray = Associative Array( theList );
theNewList = theArray << Get Keys;
Show( theNewList );Re : Comment diviser plusieurs mots-valeurs et les réorganiser par ordre alphabétiqueNon, aucune des solutions spécifiées ne supprime les doublons.Cette exigence ne faisait pas partie de la demande initiale.
La fonction Contient() a la capacité de vérifier les éléments d'une liste pour voir si une correspondance est trouvée.Je l'utilise assez souvent.
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);
Il suffit donc de placer ce code dans l'une ou l'autre des solutions proposées.
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 : Comment diviser plusieurs mots-valeurs et les réorganiser par ordre alphabétiqueEn plus de la segmentation et du tri, cette formule ajoute-t-elle et supprime-t-elle les valeurs dupliquées après la segmentation et ne conserve-t-elle que les champs qui ne se répètent pas ? Par exemple :

Cordialement.
Re : Comment diviser plusieurs mots-valeurs et les réorganiser par ordre alphabétiqueCher @txnelson et @Jeff_Perkinson Merci beaucoup pour vos réponses; 0ne une grande leçon sur les boucles et l'autre un one-liner époustouflant.
Je vais ajouter les deux à mon sac de JSL.
Cordialement.
Re : Comment diviser plusieurs mots-valeurs et les réorganiser par ordre alphabétiqueTrès très gentilRe : Comment diviser plusieurs mots-valeurs et les réorganiser par ordre alphabétiqueCe n'est pas souvent que je peux m'améliorer @txnelson , mais je peux le résumer à une formule d'une ligne:
Concat Items( Sort List( Words( :Current data, "/" ) ), "/" )
Mots() crée une liste de mots en divisant la colonne en mots en utilisant un "/" comme délimiteur.
Trier la liste() trie la liste par ordre alphabétique
Concater des éléments() concatène les éléments de la liste en une seule chaîne en utilisant le "/" pour séparer les éléments.

Re : Comment diviser plusieurs mots-valeurs et les réorganiser par ordre alphabétiqueVoici une formule qui fonctionne sur votre exemple de tableau de données.Ci-joint un tableau de données avec la formule appliquée
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]
);
)