用于将所有 CSV 文件连接到一个 JMP 表中的脚本你好!
我当前用于打开包含 CSV 文件的目录并将它们连接到一个主文件中的脚本不起作用,我希望了解其中的原因。 我已经指定了变量 dir 和 files,当文件夹中有 4 个文件时,循环似乎在获取第一个文件后结束。 另外,是否有一个脚本可以读取 CSV 文件的文件名并用它来填充新列?
为了(我= 1 , 我 < N 项(文件),i++,
这个表=打开(目录 || 文件[i]);
// 创建新列来指示 SD ID
新专栏( “EX801.SD.ID” 、字符、多重响应);
对于每一行(:EX801.SD.ID = “运行1” ); // 卡在输入 SD ID - 需要文件名!
这个表 <<移动选定的列({:EX801.SD.ID},到第一个);
// 删除列“......PV”
为了(我= N 列(此表),我> 32 , 我 - , // 需要第 32 列
这个表 <<删除列(柱子(我));
);
// 在每个列名前面添加“I”,以便与后面的列名匹配
为了(我= 3 , 我 <= 32 , 我++,
柱子(这个表,我)<<设置名称( “我” || (柱子(这个表,我)<<获取姓名) );
);
dt <<连接(这个表, “附加到第一个表” );
关闭(此表);
dt <<选择地点(不见了(:时间)) <<删除行;
);
回复:将所有 CSV 文件连接到一个 JMP 表中的脚本非常感谢您的选择! 但是,在导入文件后,我似乎无法使用循环脚本来清理它。 关于这是为什么的任何建议?
// 从选定的文件夹导入 csv 文件
这个表=多个文件导入(
<<设置文件夹(目录),
<<设置名称过滤器( “*.*;” ),
<<设置名称启用( 0 ),
<<设置尺寸过滤器({ 254056 , 261197 } ),
<<设置尺寸启用( 0 ),
<<设置日期过滤器({ 3632893806 , 3633422386 } ),
<<设置日期启用( 0 ),
<<设置添加文件名列( 1 ),
<<设置添加文件大小列( 0 ),
<<设置添加文件日期列( 0 ),
<<设置导入模式( “CSV数据” ),
<<设置字符集( “最佳的揣测” ),
<<设置堆栈模式( “类似堆栈” ),
<<设置 CSV 有标题( 1 ),
<<设置 CSV 允许数字( 1 ),
<<设置 CSV 第一标题行( 1 ),
<<设置 CSV 标题行数( 1 ),
<<设置 CSV 第一数据行( 2 ),
<<设置 CSV EOF 逗号( 1 ),
<<设置 CSV EOF 选项卡( 0 ),
<<设置 CSV EOF 空间( 0 ),
<<设置 CSV EOF 空格( 0 ),
<<设置 CSV EOF 其他( ”” ),
<<设置 CSV EOL CRLF ( 1 ),
<<设置 CSV EOL CR ( 1 ),
<<设置 CSV EOL LF ( 1 ),
<<设置 CSV EOL 分号( 0 ),
<<设置 CSV EOL 其他( ”” ),
<<设置 CSV 报价( “\!” ),
<<设置 CSV 转义( ”” )
) <<导入数据;
这个表 <<移动选定的列({:文件名},到第一个);
// 删除列“......PV” // 卡在这里
为了(k = N 列(本表), k > 32 , k--, // 需要第 32 列
这个表 <<删除列(柱子(k));
);
回复:将所有 CSV 文件连接到一个 JMP 表中的脚本您的问题是您在两个 For 循环中使用变量“i”,其中一个 For 循环位于另一个 For 循环内部......因此,您的“i”值没有针对外部循环正确递增。
我在下面的脚本中更改了内部循环的循环变量。这可能是您的解决方案
For( i = 1, i < N Items( files ), i++,
thisTable = Open( dir || files[i] );
// creates new column to indicate SD ID
New Column( "EX801.SD.ID", Character, Multiple Response );
For Each Row( :EX801.SD.ID = "Run1" ); // stuck at inputing SD ID - need file name!
thisTable << Move Selected Columns( {:EX801.SD.ID}, To First );
// deletes columns "......PV"
For( k = N Cols( thisTable ), k > 32, k--, // 1st 32 columns are needed
thisTable << delete columns( Column( k ) );
);
// adds "I" in front of each column name to be matched with column name later
For( k = 3, k <= 32, k++,
Column( thisTable, k ) << Set Name( "I" || (Column( thisTable, k ) << Get Name) );
);
dt << Concatenate( thisTable, "Append to First Table" );
Close( thisTable );
dt << Select Where( Is Missing( :TIME ) ) << Delete Rows;
);
如果您使用的是 JMP 14,您也许可以使用 Multiple File Import() 函数。
回复:将所有 CSV 文件连接到一个 JMP 表中的脚本选择“文件”>“多个文件导入”。 有关详细信息,请参阅帮助 > 使用 JMP。 所有选项都可以编写脚本。 第一次以交互方式使用它,以确保您在已知情况下获得结果。 然后将源表脚本复制到您自己的脚本中。