Colonne dei risultati Testo in colonneSto usando la funzione JSL Text to Columns () incorporata. Non saprò quanti "segmenti" ha il mio testo di input, quindi non saprò in anticipo quante nuove colonne risulteranno dalla chiamata della funzione. Ma ho bisogno di sapere questo in modo da poter eseguire alcuni passaggi successivi nel mio script.
Ai tempi in cui si trattava di un componente aggiuntivo, la v3 di Jeff Perkinson restituiva un risultato che forniva i nomi delle colonne che erano state create; la versione integrata non sembra restituire nulla (?). Ho installato la sua v3, ma non ottengo l'accesso tramite script alla sua versione della funzione. (Sono su JMP 15 EA in questo momento; non ho fatto altro che provare a chiamare la funzione nel suo spazio dei nomi come descritto nei documenti v3).
Domande:
1. Supponendo che userò la versione integrata di Text to Columns(), qual è un buon modo per ottenere i nomi delle colonne che sono state create (o almeno il *numero* di colonne che sono state create).
2. Sarebbe meglio usare JP's v3 e, in tal caso, come posso renderlo richiamabile in questi giorni.
John
Oggetto: Colonne dei risultati da testo a colonneQuesto funziona bene per me:
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);
)
)
);Esempio:
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]
Oggetto: Colonne dei risultati da testo a colonnePenso che potrei semplicemente avvolgere il Text to Columns() integrato in una funzione utente che aggiunge questa funzionalità sotto forma di un valore restituito.
JohnOggetto: Colonne dei risultati da testo a colonneEcco un modo semplice per ottenere il numero di colonne aggiunte
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;