文字数は高速に確保できるので
1次元の文字列型変数を大量に確保して、
それを擬似的な配列として管理し
そこからデータを切り貼りしたらどうだろう。
と思い 勢いで適当に実験して見ました。
/* Version 0.4.11 */
#module mod_string_array string, dimsize1, dimsize2, dimsize3, index, stmp
// ここからモジュール変数操作命令
// モジュール変数初期化
#modinit int p1, int p2, int p3, int p4
sdim string, p1 * p2 * p3 * p4
sdim stmp, p1
dimsize1 = p1
dimsize2 = p1 * p2
dimsize3 = p1 * p2 * p3
return
// 操作領域計算
#modfunc m_msa_access int p1, int p2, int p3
index = (dimsize1 * p1) + (dimsize2 * p2) + (dimsize3 * p3)
return
// 領域に書き込み
#modfunc m_msa_write str s
dupptr stmp, varptr(string) + index, dimsize1 - 1, 2
stmp = s
return
// 領域から読み込む
#modfunc m_msa_read
dupptr stmp, varptr(string) + index, dimsize1 - 1, 2
return stmp
// ここまで内部用命令。
// データを格納する変数を初期化
// msa_dim データを格納する変数, 文字数, 配列要素の最大(3次元まで)...
#deffunc msa_dim array a, int p1, int p2, int p3, int p4
dim a
newmod a.0, mod_string_array, p1, p2, p3, p4
return
// データ変数に操作領域を設定
// msa_access msa_dimで初期化した変数, アクセスする配列要素(3次元まで)...
#deffunc msa_access array a, int p1, int p2, int p3
m_msa_access a.0, p1, p2, p3
return
// 初期化した変数に文字列を書き込み
// msa_write msa_dimで初期化した変数, 書き込む文字列
#deffunc msa_write array a, str s
m_msa_write a.0, s
return
// 初期化した変数から文字列を取り出す
// msa_read msa_dimで初期化した変数
// 戻り値:領域にある文字列
#defcfunc msa_read array a
m_msa_read a.0
return refstr
#global
// サンプル
// 変数初期化
msa_dim buf, 10, 10, 50, 50
// 書き込み
repeat 16
msa_access buf, cnt\10, cnt/10
msa_write buf, strf("「%02d」", cnt)
loop
// 読み込み
repeat 16
msa_access buf, cnt // 要素は纏めれる
mes "読み出し:" + msa_read(buf)
loop
初めはマクロで作っていたんですが、面倒になりモジュール化、
更にモジュール変数化と徐々に複雑になってしまいました。
(モジュール変数は0次元しか使って無いけど、
要素の最大や添え字などを記憶できるので)
デバッグは余りしておらず きっとバグがあると思いますので
もし使う方が居るなら(居ないだろうけど)処理が変じゃないか確認してください。
(ちなみにスクリプトは、煮るなり焼くなり好きにしていいので)
というか蛇足でしたね。
すみません。