Teilen Sie eine Spalte und erstellen Sie mehrere Mehrfache basierend auf der Aufteilung mit JSLHallo,
Ich muss die vorhandene Tabelle lesen und die Spalte von Interesse finden [sagen wir, der Spaltenname ist "Daten"].
Die Spalte "Daten" ist numerisch mit "Punkt" begrenzt und hat die gleiche Länge.
Mein Ziel ist es, diese Tabelle zu öffnen, die Spalte "Daten" zu lesen, den "Punkt" zu entfernen und neue Spalten [gemäß der Länge des Werts] zu erstellen, und jede Spalte enthält jeden Wert.
Orig Tabelle:
Daten
------ ------.
123.56.8.342
431.02.0.567
318.00.1.816
..... .....
erwartete Ausgabe:
Daten c1 c2 c3 c4 c5 c6 c7 c8 c9
-------------------------------------------------- ----------------------------
123.56.8.342 1 2 3 5 6 8 3 4 2
431.02.0.567 4 3 1 0 2 0 5 6 7
318.00.1.816 3 1 8 0 0 1 8 1 6
In meinem ersten Versuch [trial1.jmp], bei dem ich 2 for-Schleifen [innere Schleife zum Erstellen von Spalten und eine andere Schleife für die Anzahl der Zeilen] habe, werden mehr Spalten erstellt [dh die Breite der gelesenen Daten * Anzahl der Zeilen] .
In meinem zweiten Versuch [trail2.jmp] erhalte ich die richtige Anzahl von Spalten, aber Werte statisch.
beigefügt ist mein jsl.
Schätzen Sie die Hilfe, indem Sie das Mitternachtsöl darauf verbrennen:(
Vielen Dank,
David
DatentabelleBetreff: Teilen Sie eine Spalte und erstellen Sie mehrere Mehrfache basierend auf der Aufteilung mit JSLIch habe nur die Version 2 von .jsl überprüft und es war ziemlich nah.
Ich habe eine modifizierte Version angehängt.
Ich habe den Loop-Teil meistens modifiziert. Es gibt höchstwahrscheinlich eine Möglichkeit, ohne Eval (Parse ()) mit Ausdrücken auszukommen, aber diesmal habe ich mich für diese Lösung entschieden. Sie haben Daten aus der Variablen clean_DATA verwendet, die für alle Zeilen gleich bleiben. Auch wenn Sie Formeln benötigen, müssen Sie Eval (Parse ()) (oder Ausdrücke?) Verwenden, damit die Formeln in der Datentabelle funktionieren. Wenn keine Formeln benötigt werden, würde ich << Setze jeden Wert anstelle von Formel verwenden.
For(i = 1, i <= ncols_to_add, i++, // the || operator joins two strings
Eval(Parse("dt << New Column(\!"c\!" || Char(i),Numeric, Continous,
Formula(Num(Substr(Regex(:data, \!"\D\!", \!"\!", GLOBALREPLACE ), "||char(i)||", 1 )));
)));")); // put 1 bit in each column
);Mit << Set Each Value würde die for-Schleife folgendermaßen aussehen:
For(i = 1, i <= ncols_to_add, i++, // the || operator joins two strings
dt << New Column("c" || Char(i),Numeric, Continous,
<< Set Each Value(Num(Substr(Regex(:data, "\D", "", GLOBALREPLACE ), i, 1 )));
)
); // put 1 bit in each columnBetreff: Teilen Sie eine Spalte und erstellen Sie mehrere Mehrfache basierend auf der Aufteilung mit JSLHier ist, wie ich Ihre Anfrage erfüllen würde.Die Substitute () -Funktion ermöglicht, dass die Formel den tatsächlichen Wert der Variablen "i" in der Formel hat und nicht auf die Variable "i" verweist.
Names Default To Here( 1 );
dt = Current Data Table();
col = Column( dt, "DATA" );
colLength = Length( col[1] );
For( i = 1, i <= colLength, i++,
If( Substr( col[1], i, 1 ) != ".",
Eval(
Substitute(
Expr(
dt << New Column( "c" || Char( i ), Numeric, Continous, Formula( Num( Substr( :data, __i__, 1 ) ) ) )
),
Expr( __i__ ), i,
)
)
)
);Betreff: Teilen Sie eine Spalte und erstellen Sie mehrere Mehrfache basierend auf der Aufteilung mit JSLVielen Dank an Jamo, dass er mich wissen ließ, was mir fehlte. Ich wusste, dass ich nahe war;)
Ich weiß nichts über die eingebaute Funktion "Setze jeden Wert".
Ja, alles funktioniert!
Vielen Dank,
David
Betreff: Teilen Sie eine Spalte und erstellen Sie mehrere Mehrfache basierend auf der Aufteilung mit JSLDanke Jim.
Sie haben eine elegante Lösung.
Aufgrund Ihrer vorgeschlagenen Methode habe ich festgestellt, dass der Spaltenname nicht fortgesetzt wird, [dh. überspringt die Spalte #, wenn jemals ein "Punkt" gefunden wird]; Es ist eine kleine Massage mit Spaltennamen erforderlich [um die ich mich gekümmert habe].
Frage:
Würden Sie vorschlagen, dass die Spalte eine Formel hat und eval / replace verwendet, oder tun Sie dies mit "jeden Wert festlegen", wie Jamo es vom Standpunkt der Leistung aus vorgeschlagen hat?
Vielen Dank,
David