Ergebnisspalten für Text in SpaltenIch verwende die integrierte JSL-Funktion Text to Columns(). Ich weiß nicht, wie viele „Segmente“ mein Eingabetext hat, also weiß ich nicht im Voraus, wie viele neue Spalten durch den Aufruf der Funktion entstehen. Aber ich muss das wissen, damit ich bestimmte nachfolgende Schritte in meinem Skript ausführen kann.
Damals, als es sich noch um ein Add-In handelte, gab Jeff Perkinsons v3 ein Ergebnis zurück, das die Namen der erstellten Spalten angab; Die integrierte Version scheint nichts zurückzugeben (?). Ich habe seine Version 3 installiert, erhalte jedoch keinen skriptfähigen Zugriff auf seine Version der Funktion. (Ich verwende gerade JMP 15 EA; ich habe nicht herumgespielt, außer zu versuchen, die Funktion in seinem Namensraum aufzurufen, wie in den v3-Dokumenten beschrieben).
Fragen:
1. Angenommen, ich verwende die integrierte Version von Text to Columns(), was ist eine gute Möglichkeit, die Namen der erstellten Spalten zu erhalten (oder zumindest die *Anzahl* der erstellten Spalten).
2. Wäre es besser, JPs v3 zu verwenden, und wenn ja, wie mache ich es heutzutage aufrufbar?
John
Betreff: Text in Spalten-ErgebnisspaltenDas funktioniert bei mir gut:
Add Custom Functions(
New Custom Function(
"my",
"Text to Columns",
// Wraps native Text to Columns() to make it return an associative array,
// containing the split column name(s) split (as keys), and the number of
// columns added (as values)
Function( {columns, delims, table = Current Data Table()},
// First parameter should be a list, but accept single value without brackets
If( Not( Is List( columns ) ),
columns = {columns}
);
columns = table << Get Column Reference( columns );
If( Not( Is String( delims ) ),
Throw()
);
n_cols = N Items( columns );
result = Associative Array();
For( i = 1, i <= n_cols, i++,
cols_before = N Cols( table );
Eval( Parse( Eval Insert( "^table^ << Text to Columns(delimiters(\!"^delims^\!"), columns(^columns[i]^))" ) ) );
cols_added = N Cols( table ) - cols_before;
result << Insert Item( columns[i] << Get Name, cols_added );
);
Return( result);
)
)
);Beispiel:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Consumer Preferences.jmp" );
my:Text to Columns({:Brush Delimited, :Floss Delimited}, ",", dt)
["Brush Delimited" => 4, "Floss Delimited" => 4]
Betreff: Text in Spalten-ErgebnisspaltenIch denke, ich könnte einfach den integrierten Text to Columns() in eine Benutzerfunktion einbinden, die diese Funktionalität in Form eines Rückgabewerts hinzufügt.
JohnBetreff: Text in Spalten-ErgebnisspaltenHier ist eine einfache Möglichkeit, die Anzahl der hinzugefügten Spalten zu ermitteln
Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 2 ),
New Column( "the text", Character, "Nominal", Set Values( {"A,B,C,D", "X,Y,Z"} ) )
);
nColNow = N Items( dt << get column names );
dt << text to columns( delimiter( "," ), columns( :the text ) );
colAdded = N Items( dt << get column names ) - nColNow;