Cómo dividir valores de varias palabras y reorganizarlos en orden alfabéticoTengo una columna con valores de caracteres que son abreviaturas de dos letras. Algunos son valores únicos y otros son valores múltiples separados por el delimitador “/”. El problema es que los valores de valores múltiples no están en orden alfabético.
Quiero recorrer cada fila y dividir los valores múltiples y reorganizarlos en orden alfabético e insertar el nuevo "valor" en una nueva columna. Los valores únicos deben "copiarse" y los nulos deben dejarse como nulos.
Esto está muy por encima de mi cabeza y agradeceré cualquier sugerencia de punteros o listas de lectura que me ayuden a solucionar este problema.
¡Gracias!
Datos actuales Datos NUEVOS
AB AB
CD CD
EF EF
CD / AB AB / CD
nulo nulo
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])),
),
);ScriptingRe: Cómo dividir valores de varias palabras y reorganizarlos en orden alfabéticoAquí hay una fórmula que funciona en su tabla de datos de muestra.Se adjunta una tabla de datos con la fórmula aplicada
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]
);
)Re: Cómo dividir valores de varias palabras y reorganizarlos en orden alfabéticoNo es frecuente que pueda mejorar @txnelson , pero puedo reducirlo a una fórmula de una línea:
Concat Items( Sort List( Words( :Current data, "/" ) ), "/" )
Palabras() crea una lista de palabras dividiendo la columna en palabras usando una "/" como delimitador.
Lista Ordenada() ordena la lista alfabéticamente
Elementos de Concat () concatena los elementos de la lista en una sola cadena usando "/" para separar los elementos.

Re: Cómo dividir valores de varias palabras y reorganizarlos en orden alfabéticoMuy, muy agradableRe: Cómo dividir valores de varias palabras y reorganizarlos en orden alfabéticoquerido @txnelson y @Jeff_Perkinson Muchas gracias por sus respuestas; Una es una gran lección sobre los bucles y la otra una alucinante frase de una sola línea.
Agregaré ambos a mi bolsa de JSL.
Atentamente.
Re: Cómo dividir valores de varias palabras y reorganizarlos en orden alfabéticoAdemás de la segmentación y la ordenación, ¿esta fórmula agrega y elimina los valores duplicados después de la segmentación y conserva solo los campos que no se repiten?

Atentamente.
Re: Cómo dividir valores de varias palabras y reorganizarlos en orden alfabéticoNo, ninguna de las soluciones especificadas elimina los duplicados.Ese requisito no formaba parte de la solicitud original.
La función Contains () tiene la capacidad de verificar los elementos de una lista para ver si se encuentra una coincidencia.Lo uso bastante a menudo.
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);
Entonces, todo lo que hay que hacer es colocar este código en una u otra solución sugerida.
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;