|
マクロで配列を使う場合の注意点についてはIKKIさんの言われる通りで、現状では配
列を使う限りは難しいところがあります。
効率が悪いところもあるので、改善を検討したいと思います。
現状でなんとかする方法の1つとして、COMオブジェクトのScripting.Dictionaryを
使うと、外部のソフトを入れずに標準のままでできるので、いいかもしれません。
配列というより文字列に対応する文字列という感じですが、例えば以下のような感じ
に使えるようです。
#objDic=createobject("Scripting.Dictionary");
member #objDic, "Add", "a1", "a1の値";
member #objDic, "Add", "a2", "a2の値";
message member(#objDic,"Item","a1");
message member(#objDic,"Item","a2");
endmacro;
今回の例に当てはめると、以下のような感じになるのではないかと思います。
#objDic = createobject("Scripting.Dictionary");
beginclipboardread;
#i = 0;
while( 1 ) {
$a = getclipboard;
if( $a == "" ) break;
call SPLIT_DATA $a,"\t",#i;
#i = #i + 1;
}
//配列を使う場合
//message "[1][1]の値:\n" + $SPLIT_DATA[1][1];
//Scripting.Dictionaryを使う場合
message "[1][1]の値:\n" + member(#objDic,"Item","SPLIT_DATA-1-1");
endmacro;
SPLIT_DATA:
##l = strlen( $$1 );
##p = strlen( $$2 );
##a = ##3;
##b = 0;
while( 1 ){
if( !##l ) break;
##s = strstr( $$1, $$2 );
if( ##s == -1 ){
$SPLIT_DATA[##a][##b] = $$1;
##b = ##b + 1;
break;
}
//配列を使う場合
//$SPLIT_DATA[##a][##b] = leftstr( $$1, ##s );
//Scripting.Dictionaryを使う場合
member #objDic, "Add", "SPLIT_DATA-"+str(##a)+"-"+str(##b), leftstr
( $$1, ##s );
##l = ##l - ##s - ##p;
$$1 = rightstr( $$1, ##l );
##b = ##b + 1;
}
return ##b;
|
|