<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 :乔治<<获取矩阵) ;
斑点状=矩阵块(数据垫, “漂浮” , 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 ,一世<=物品(名称) ,一世++,
文本=扎<<读(名称[一世]) ;
提取物<<新栏目(名称[一世] ,价值观(解析(文本))) ;
) ;
停止=滴答秒() ;
节目(停止-开始) ;
停止 - 开始 = 12.3500000000349; // 在 12 到 14 秒内解压+加载 1,000,000 x 6