Kombinieren von zwei SaitenHallo,
Ich habe 2 Spalten, die Strings im folgenden Format enthalten:
string1 = 1,11;0;3;0;5
string2 = 0;2.2;0;4;0
Hinweis 1: Beide Strings enthalten die gleiche Anzahl von ";" (aber sie sind nicht unbedingt gleich lang).
Hinweis 2: Die beiden Saiten haben abwechselnd Nullen.
Ich möchte eine neue Spalte (string3) erstellen, die das Ergebnis der Zusammenführung der beiden Spalten ohne die Nullen ist. Für das obige Beispiel: 1.11;2.2;3;4;5
Daher sollte string3 die gleiche Anzahl von ";" haben. als string1 und string2 und muss alle Begriffe zwischen den ";" auf Bestellung, ohne 0.
Gibt es eine Möglichkeit, dies nur mit Formeln zu tun (ohne JSL-Skripting)?
Gibt es alternativ eine Möglichkeit, dies mit jsl zu tun?
Bitte beachten Sie die angehängte Datei.
Vielen Dank,
Yotam
DatentabelleSkriptingRe: Kombinieren von zwei SaitenHier ist eine Formel, die funktioniert.Ich habe eine neue Datentabelle mit einer neuen Formelspalte angehängt
w = 1;
newString = "";
While( Word( w, :string1, ";" ) != "",
If( newString != "",
newString = newString || ","
);
If( Word( w, :string1, ";" ) != "0",
newString = newString || Word( w, :string1, ";" ),
newString = newString || Word( w, :string2, ";" )
);
w++;
);
newString;
Re: Kombinieren von zwei Saiten@DonMcCormack - Ich denke, dies könnte ein großes Herausforderungsproblem sein.
- wie man Fehler in den Strings abfängt und damit umgeht (Nicht-Zahlen, nicht übereinstimmende Nullen, nicht gleiche Länge)
- wie man es schnell für 1E6 Semikolons macht
Bearbeiten: Verwenden des JMP 16 Für jedes Across Schleife:
string1 = "1;0;2;0;0;8;0";
string2 = "0;1;0;3;5;0;13";
result = "";
For Each( {{w1, w2}, idx}, across( Words( string1, ";" ), Words( string2, ";" ) ),
result ||= (If( idx > 1, ",", "" ) || If( w1 == "0", w2, w1 ))
);
result;"1,1,2,3,5,8,13"
Re: Kombinieren von zwei SaitenFantastisch.
Vielen Dank!
Re: Kombinieren von zwei SaitenVielen Dank!
Leider habe ich derzeit noch kein JMP16, aber diese Lösung sieht auf jeden Fall sehr elegant aus!
Re: Kombinieren von zwei SaitenWährend @txnelson und @Craige_Hales gab Ihnen einige interessante und nützliche Optionen, wenn ich Ihre Situation richtig verstanden habe, kann dies in einer Formel ohne Schleifen erfolgen.
Hier ist die Formel, mit der ich gelandet bin, zuerst als Bild und dann in JSL (die in den Formel-Editor eingefügt werden kann).

If( !Is Missing( :string1 ) & !Is Missing( :string1 ),
string1list = Words( :string1, ";" );
string2list = Words( :string2, ";" );
Concat Items( string1list[Loc( string1list, "0" )] = string2list[Loc( string1list, "0" )], ";" );
,
""
)
Dies verwendet die Wörter() -Funktion, um Ihre Strings in Listen umzuwandeln. Es verwendet die Lok() -Funktion, um eine Matrix von Positionen der Nullen in string1 zurückzugeben und verwendet diese als Index sowohl für string1list (auf der linken Seite einer Zuweisung) als auch für string2list (auf der rechten Seite dieser Zuweisung). Endlich, das Konkat-Elemente() -Funktion wandelt die Liste zurück in eine durch Semikolon getrennte Zeichenfolge.
Wenn etwas davon verwirrend oder nicht sinnvoll ist, lassen Sie es mich wissen und ich erkläre es weiter.