<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />外部プログラムから JMP にデータを移動する方法についてのリクエストがありました。通常、これには CSV ファイルを使用することをお勧めしますが、圧縮が問題になる場合は、別のものが必要になる可能性があります。ここにいくつかの概念実証スクリプトを示します (彼らがあなたが必要なことをするかどうかを確認する必要があります)。外部プログラムがないため、各スクリプトは 2 つの部分に分かれています。テーブルから zip ファイルを作成し、次に zip ファイルからテーブルを再作成します。これは、外部プロセスがデータをパッケージ化して JMP に提示する方法を制御できることを前提としています。
重要なポイント: zip ファイルには、バイナリ データ (最初の例) または印刷可能データ (2 番目の例) を含めることができます。JslのmatrixToBlobとBlobToMatrixは高速です。ループしないでください。または、いくつかの列をループするだけです。多数の行の場合、行ごとにループすることは避けてください。JMP の zip ファイル API は新しいメンバーを追加し、おそらく本名以前のメンバーを避けるには、deleteFile() に注目してください。zip (za=0) をクリアする必要はありません。これは、ファイルが JMP の外部 (ディスク上) にあることを示唆しています。数値を印刷可能なものに変換したり、逆に変換したりするのは遅く、書式設定された値の桁数が足りない場合には損失が生じる可能性もあります。
最初のスクリプトは、生データを「リトルエンディアン」形式で zip ファイル メンバーに一度に 1 行ずつ配置します。印刷可能に相互に変換しないため高速です。
2 番目のスクリプトは、列の書式設定されたデータを zip ファイル メンバーに、メンバーごとに 1 列ずつ配置します。数値データは行列に、文字はリストに入れられます。
両方のスクリプトのアイデアを組み合わせることができます。
例1
この例では、バイナリ数値データを想定しています。本当にそうあるべきです速い。キャラクターデータはこのままでは機能しません...
// (このコードはテストされていません!) サンプルの数値データを作成します
dt =新しいテーブル( "人々" 、行の追加( 1e7 ) 、
新しい列( "フレッド" 、数値、継続的、フォーマット( "最高" 、 12 ) 、式(ランダム ノーマル() ) ) 、
新しい列( 「ラルフ」 、数値、継続的、フォーマット( "最高" 、 12 ) 、式(ランダム ノーマル() ) ) 、
新しい列( 「ジョージ」 、数値、継続的、フォーマット( "最高" 、 12 ) 、式(ランダム ノーマル() ) 、 )
) ;
// バイナリデータを含むサンプル zip ファイルを作成します
データマット= ( dt :フレッド<<ゲタスマトリックス) || ( dt :ラルフ<<ゲタスマトリックス) || ( dt :ジョージ<<ゲタスマトリックス) ;
ブロブマット=マトリックストブロブ(データマット、 "浮く" 、 8 、 "少し" ) ;
ざ=開ける( 「$temp/deleteme2.zip」 、 "ジップ" ) ;
本名=ざ<<書く( "データ" 、ブロブマット) ;
// クリアジップ
ざ= 0 ;
// zipを再度開きます
ざ=開ける( 「$temp/deleteme2.zip」 、 "ジップ" ) ;
見せる(ざ<<ディレクトリ) ; // メンバーをチェックする
始める=ティック秒() ;
ブロブエキス=ざ<<読む(本名、フォーマット(塊)) ;
データ抽出=ブロブトマトリックス(ブロブエキス、 "浮く" 、 8 、 "少し" 、 3 /*列*/ ) ;
dtexttract =新しいテーブル() ;
dtexttract <<セットマトリックス(データ抽出) ;
停止=ティック秒() ;
見せる(停止-始める) ;
停止 - 開始 = 2.01666666666279; // 10,000,000 行 x 3 列を 2 ~ 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」 、 "ジップ" ) ;
列名=ざ<<ディレクトリ; // メンバーをチェックする
dtexttract =新しいテーブル( 「抽出された」 ) ;
のために(私= 1 、私<=ナイアイテム(列名) 、私++、
TXT =ざ<<読む(列名[私]) ;
dtexttract <<新しい列(列名[私】 、価値観(解析する( TXT ))) ;
) ;
停止=ティック秒() ;
見せる(停止-始める) ;
停止 - 開始 = 12.3500000000349; // 1,000,000 x 6 を 12 ~ 14 秒で解凍 + ロード