Texte en colonnes colonnes de résultatsJ'utilise la fonction intégrée JSL Text to Columns(). Je ne saurai pas combien de "segments" mon texte d'entrée a, donc je ne saurai pas à l'avance combien de nouvelles colonnes résulteront de l'appel de la fonction. Mais j'ai besoin de le savoir pour pouvoir effectuer certaines étapes ultérieures de mon script.
À l'époque où il s'agissait d'un complément, la v3 de Jeff Perkinson renvoyait un résultat qui donnait les noms des colonnes qui avaient été créées ; la version intégrée ne semble rien renvoyer (?). J'ai installé sa v3, mais je n'obtiens pas d'accès scriptable à sa version de la fonction. (Je suis sur JMP 15 EA en ce moment ; je n'ai pas essayé d'autre que d'essayer d'appeler la fonction dans son espace de noms, comme décrit dans la documentation v3).
Des questions:
1. En supposant que j'utiliserai la version intégrée de Text to Columns(), quel est un bon moyen d'obtenir les noms des colonnes qui ont été créées (ou au moins le *nombre* de colonnes qui ont été créées).
2. Serait-il préférable d'utiliser la v3 de JP, et si oui, comment puis-je la rendre appelable de nos jours.
John
Re : Texte dans les colonnes de résultats des colonnesCela fonctionne bien pour moi:
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);
)
)
);Exemple:
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 : Texte dans les colonnes de résultats des colonnesJe pense que je pourrais simplement envelopper le Text to Columns() intégré dans une fonction utilisateur qui ajoute cette fonctionnalité sous la forme d'une valeur de retour.
JohnRe : Texte dans les colonnes de résultats des colonnesVoici un moyen simple d'obtenir le nombre de colonnes ajoutées
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;