文本到列结果列我正在使用内置的 JSL Text to Columns() 函数。 我不知道我的输入文本有多少个“段”,因此我不会提前知道调用该函数会产生多少个新列。 但我需要知道这一点,以便我可以在脚本中执行某些后续步骤。
当这是一个加载项时,Jeff Perkinson 的 v3 返回一个结果,其中给出了已创建的列的名称;内置的版本似乎没有返回任何内容(?)。 我安装了他的 v3,但我无法通过脚本访问他的函数版本。 (我现在使用的是 JMP 15 EA;除了尝试按照 v3 文档中的描述调用他的命名空间中的函数之外,我没有闲逛)。
问题:
1. 假设我将使用 Text to Columns() 的内置版本,那么获取已创建的列的名称(或至少是已创建的列的*数量*)的好方法是什么。
2.使用JP的v3会更好吗?如果是的话,我现在如何使其可调用。
约翰
回复:文本到列结果列这对我来说效果很好:
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);
)
)
);例子:
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]
回复:文本到列结果列我想我可能只是将内置的 Text to Columns() 包装到一个用户函数中,该函数以返回值的形式添加此功能。
约翰回复:文本到列结果列这是获取添加列数的简单方法
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;