<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />刚刚请求一种将数据从外部程序移至 JMP 的方法。一般来说,我建议使用 CSV 文件,但如果压缩是一个问题,也许还需要其他东西。这是几个概念验证脚本(你需要确保他们做你需要的事情)。由于我没有外部程序,因此每个脚本分为两部分:从表创建 zip 文件,然后从 zip 文件重新创建表。这假设您可以控制外部流程如何打包数据并将数据呈现给 JMP。
要点:zip 文件可以保存二进制(第一个示例)或可打印(第二个示例)数据。Jsl matrixToBlob 和 BlobToMatrix 速度很快。不要循环,或者只循环几列。避免对很多行的每一行进行循环。JMP 的 zip 文件 API 附加新成员,可能会更改实际姓名为了避免较早的成员...请注意deleteFile()。不需要清除 zip (za=0);它暗示该文件位于 JMP 之外(在磁盘上)。将数字转换为可打印并返回的速度很慢,并且如果格式化值没有足够的数字,也可能会造成损失。
第一个脚本将原始数据以“little-endian”格式一次一行地放入 zip 文件成员中。速度快,因为它不会来回转换为可打印。
第二个脚本将列的格式化数据放入 zip 文件成员中,每个成员一列。数字数据放在矩阵中,字符放在列表中。
您可以结合两个脚本的想法。
实施例1
此示例假设二进制数字数据。应该是真的快速地。字符数据不会这样工作......
//(此代码未经测试!)制作样本数字数据
dt =新表( “人们” ,添加行( 1e7 ) ,
新专栏( “弗雷德” ,数字,连续的,格式( “最好的” , 12 ) ,公式(随机正态() ) ) ,
新专栏( “拉尔夫” ,数字,连续的,格式( “最好的” , 12 ) ,公式(随机正态() ) ) ,
新专栏( “乔治” ,数字,连续的,格式( “最好的” , 12 ) ,公式(随机正态() ) , )
) ;
// 使用二进制数据制作示例 zip 文件
数据表= ( dt :弗雷德<<获取矩阵) || ( dt :拉尔夫<<获取矩阵) || ( dt :乔治<<获取矩阵) ;
斑点=矩阵到blob (数据表, “漂浮” , 8 , “小的” ) ;
扎=打开( “$temp/deleteme2.zip” , “压缩” ) ;
实际姓名=扎<<写( “数据” ,斑点) ;
// 清除拉链
扎= 0 ;
// 重新打开zip
扎=打开( “$temp/deleteme2.zip” , “压缩” ) ;
展示(扎<<目录) ; // 检查成员
开始=滴答秒() ;
斑点提取物=扎<<读(实际姓名,格式(斑点)) ;
数据提取=斑点基质(斑点提取物, “漂浮” , 8 , “小的” , 3 /*列*/ ) ;
文本提取=新表() ;
文本提取<<集合矩阵(数据提取) ;
停止=滴答秒() ;
展示(停止-开始) ;
停止-开始=2.01666666666279; // 在 2 到 3 秒内解压缩+加载 10,000,000 行 x 3 列
实施例2
这是另一种变体,速度较慢,但灵活的(处理数字和字符):
// (此代码未经测试!)制作样本数值数据
dt =新表( “人们” ,添加行( 1e6 ) ,
新专栏( “弗雷德” ,数字,连续的,格式( “最好的” , 12 ) ,公式(随机正态() ) ) ,
新专栏( “弗雷德·查尔” ,特点,公式(字符(随机整数( 1000 , 99999 )))) ,
新专栏( “拉尔夫” ,数字,连续的,格式( “最好的” , 12 ) ,公式(随机正态() ) ) ,
新专栏( “拉尔夫·查尔” ,特点,公式(字符(随机整数( 1000 , 99999 )))) ,
新专栏( “乔治” ,数字,连续的,格式( “最好的” , 12 ) ,公式(随机正态() ) , ) ,
新专栏( “乔治·查尔” ,特点,公式(字符(随机整数( 1000 , 99999 ))))
) ;
dt <<运行公式() ;
// 使用二进制数据制作示例 zip 文件
尝试(删除文件( “$temp/deleteme.zip” )) ;
扎=打开( “$temp/deleteme.zip” , “压缩” ) ;
碰撞= dt <<获取列引用;
为了(我= 1 ,我<=尼特姆斯(碰撞) ,我++,
数据=碰撞[我] <<获取矩阵;
姓名=碰撞[我] <<获取名称;
扎<<写(姓名,字符(数据)) ;
) ;
// 清除拉链
扎= 0 ;
// 重新打开zip
开始=滴答秒() ;
扎=打开( “$temp/deleteme.zip” , “压缩” ) ;
科名=扎<<目录; // 检查成员
文本提取=新表( “提取” ) ;
为了(我= 1 ,我<=尼特姆斯(科名) ,我++,
TXT =扎<<读(科名[我]) ;
文本提取<<新栏目(科名[我] ,价值观(解析( TXT ))) ;
) ;
停止=滴答秒() ;
展示(停止-开始) ;
停止-开始=12.3500000000349; // 在 12 到 14 秒内解压+加载 1,000,000 x 6