Texto a columnas de resultados de ColumnasEstoy usando la función incorporada JSL Text to Columns(). No sabré cuántos "segmentos" tiene mi texto de entrada, por lo que no sabré de antemano cuántas columnas nuevas resultarán de llamar a la función. Pero necesito saber esto para poder realizar ciertos pasos posteriores en mi script.
Antes, cuando se trataba de un complemento, la v3 de Jeff Perkinson devolvía un resultado que proporcionaba los nombres de las columnas que se habían creado; la versión que está incorporada no parece devolver nada (?). Instalé su v3, pero no obtengo acceso programable a su versión de la función. (Estoy en JMP 15 EA en este momento; no he jugado más que intentar llamar a la función en su espacio de nombres como se describe en los documentos v3).
Preguntas:
1. Suponiendo que usaré la versión incorporada de Text to Columns(), ¿cuál es una buena manera de obtener los nombres de las columnas que se crearon (o al menos el *número* de columnas que se crearon).
2. ¿Sería mejor usar la versión 3 de JP y, de ser así, cómo puedo hacer que se pueda llamar en estos días?
John
Re: Columnas de resultados de texto a columnasEsto funciona bien para mi:
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);
)
)
);Ejemplo:
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]
Re: Columnas de resultados de texto a columnasCreo que podría envolver el Text to Columns() integrado en una función de usuario que agregue esta funcionalidad en forma de valor de retorno.
JohnRe: Columnas de resultados de texto a columnasAquí hay una manera simple de obtener el número de columnas agregadas
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;