<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMPスクリプトから大量のテキストデータを出力したいと考えています。 文字列の連結を使用して出力を構築し、[テキスト ファイルの保存] コマンドを使用して出力を一度に書き込むことができます。 ただし、これは非常に非効率であり、文字列が大きくなるにつれて実行できなくなります。
JMP は、文字列出力を作成時にバッファに直接出力できるファイル ストリームをサポートしていますか?
詳細なアプローチをありがとう。 ビニング用のリストの使用と、テキスト ファイルの保存と追加の使用を組み合わせると、ファイル ストリームの適切な近似値が得られます。 このアプローチでは、ビン サイズと定期的な追加操作を手動でコード化する必要がありますが、これらの操作が実装されているため、パフォーマンスは妥当です。
非常に長い文字列の速度低下を回避するためのもう 1 つの戦略は、短い文字列のリストを作成し、ConcatItems( list ) を使用してそれらを 1 つの文字列に結合することです。必要な区切り文字を指定します。項目間に区切り文字を追加する必要がない場合は、「」を指定します。 JMP 13 より前では、リストに何千もの項目が含まれる場合は、リストを慎重に作成する必要がある場合があります...を参照してください。高速リスト。 この例は、ビルドイットインリバースアプローチを示しています。
リスト = {};
insert into(list, "line1", 1);
insert into(list, "line2", 1);
insert into(list, "line3", 1);
リスト = 逆(リスト);
ConcatItems( リスト, "\!n");
"ライン1
2行目
ライン3"
選択できる場合は、文字列を 10,000 ~ 100,000 文字以内に収めてください。短すぎると、(おそらく) 膨大な数のリスト項目があり、それぞれに独自のオーバーヘッドがあるという問題が発生します。長すぎると、依然として連結が遅いという問題が発生します (これは N^2 の問題であるため、この方法で文字列の長さを管理すると、本当にヘルプ)。
ただし、JSL 文字列は 2^31 (2 GB) 文字に制限されています。Jim の追加のアイデアは 2GB 以上でも機能すると思います。それぞれの保存と追加にはオープン/書き込み/クローズのオーバーヘッドがあるため、それでも適度に大きなブロックをファイルに追加する必要があります。この例では、ディスクがいっぱいになるまで 500,000,000 文字ブロックを書き込みます。
txt = 繰り返し( "a", 5e8 );
テキスト ファイルを保存( "$temp\deleteme.txt", txt, Mode( "replace" ) );
Show( ファイル サイズ( "$temp\deleteme.txt" ) );
For( i = 1、i <= 20、i++、
テキスト ファイルを保存( "$temp\deleteme.txt", txt, Mode( "append" ) );
Show( ファイル サイズ( "$temp\deleteme.txt" ) );
);
ファイル サイズ("$temp\deleteme.txt") = 500000000;
ファイル サイズ("$temp\deleteme.txt") = 1000000000;
ファイル サイズ("$temp\deleteme.txt") = 1500000000;
ファイル サイズ("$temp\deleteme.txt") = 2000000000;
ファイル サイズ("$temp\deleteme.txt") = 2500000000;
ファイル サイズ("$temp\deleteme.txt") = 3000000000;
ファイル サイズ("$temp\deleteme.txt") = 3500000000;
ファイル サイズ("$temp\deleteme.txt") = 4000000000;
ファイル サイズ("$temp\deleteme.txt") = 4500000000;
ファイル サイズ("$temp\deleteme.txt") = 5000000000;
ファイル サイズ("$temp\deleteme.txt") = 5500000000;
書き込みできません。
ディスクに十分な容量がありません。

私の提案は、テキスト ファイルの保存に「Append」修飾子を使用することです。

これにより、出力ファイルに継続的にデータを取り込むことができます。