Wie man Mehrwortwerte aufteilt und sie in alphabetischer Reihenfolge neu anordnetIch habe eine Spalte mit Zeichenwerten, die aus zwei Buchstaben bestehen. Einige sind einzelne Werte und andere sind mehrere Werte, die durch das Trennzeichen „/“ getrennt sind. Das Problem ist, dass die mehrwertigen Werte nicht in alphabetischer Reihenfolge sind.
Ich möchte jede Zeile durchlaufen und die Mehrfachwerte aufteilen und sie in alphabetischer Reihenfolge neu anordnen und den neuen "Wert" in eine neue Spalte einfügen. Einzelne Werte sollten nur "kopiert" und Nullen als Nullen belassen werden.
Das geht zu weit über meinen Kopf hinaus und ich freue mich über alle Vorschläge, Hinweise oder Leselisten, die mir helfen, dieses Problem zu beheben.
Danke!
Aktuelle Daten NEUE Daten
AB AB
CD-CD
EF EF
CD/AB AB/CD
null null
EF/AB/CDAB/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])),
),
);SkripterstellungBetreff: Wie man Mehrwortwerte aufteilt und sie in alphabetischer Reihenfolge neu anordnetDieses Beispiel veranschaulicht einen anderen Ansatz mit Wörterbüchern:
Names Default To Here( 1 );
theList = {"AB", "AB", "CD", "EF"};
theArray = Associative Array( theList );
theNewList = theArray << Get Keys;
Show( theNewList );Betreff: Wie man Mehrwortwerte aufteilt und sie in alphabetischer Reihenfolge neu anordnetNein, keine der angegebenen Lösungen entfernt Duplikate.Diese Anforderung war nicht Teil des ursprünglichen Antrags.
Die Contains()-Funktion hat die Fähigkeit, Elemente in einer Liste zu überprüfen, um zu sehen, ob eine Übereinstimmung gefunden wird.Ich benutze es ziemlich oft.
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);
Es muss also nur noch dieser Code in den einen oder anderen Lösungsvorschlag eingefügt werden.
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;Betreff: Wie man Mehrwortwerte aufteilt und sie in alphabetischer Reihenfolge neu anordnetFügt diese Formel zusätzlich zur Segmentierung und Sortierung die doppelten Werte nach der Segmentierung hinzu und entfernt sie und behält nur die Felder bei, die sich nicht wiederholen? Wie zum Beispiel:

Mit freundlichen Grüßen.
Betreff: Wie man Mehrwortwerte aufteilt und sie in alphabetischer Reihenfolge neu anordnetLiebling @txnelson Und @Jeff_Perkinson Vielen Dank für Ihre Antworten; Eine ist eine großartige Lektion über Schleifen und die andere ein verblüffender Einzeiler.
Ich werde beide zu meiner Tüte JSL hinzufügen.
Mit freundlichen Grüßen.
Betreff: Wie man Mehrwortwerte aufteilt und sie in alphabetischer Reihenfolge neu anordnetSehr sehr nettBetreff: Wie man Mehrwortwerte aufteilt und sie in alphabetischer Reihenfolge neu anordnetEs kommt nicht oft vor, dass ich mich verbessern kann @txnelson , aber ich kann es auf eine einzeilige Formel bringen:
Concat Items( Sort List( Words( :Current data, "/" ) ), "/" )
Wörter() erstellt eine Liste von Wörtern, indem die Spalte mit einem „/“ als Trennzeichen in Wörter aufgeteilt wird.
Sortierliste() sortiert die Liste alphabetisch
Concat-Artikel () verkettet die Elemente in der Liste zu einer einzigen Zeichenfolge, wobei die Elemente mit „/“ getrennt werden.

Betreff: Wie man Mehrwortwerte aufteilt und sie in alphabetischer Reihenfolge neu anordnetHier ist eine Formel, die mit Ihrer Beispieldatentabelle funktioniert.Beigefügt ist eine Datentabelle mit der angewendeten Formel
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]
);
)