| |||
配列の要素番号指定で別の配列変数を使うとエラーが発生する
| |||
|
配列の要素(「.」以下)は整数値で「最大数-1」まで指定することが出来ます。 数値型の変数を使用することでも出来るようになっています。 こうすることで固定の数値ではなく、動的に変更することが出来るようになり便利ですよね。 同じ様なやり方で配列変数も指定してみると「配列の要素が無効です」とエラーが出てしまいます。 なぜ、普通の変数はいけても配列変数は指定できないのでしょう? 下記のサンプルスクリプトを見ていただければ原因がわかると思います。 | |||
sdim var1, 4, 5 dim var2,3 var1 = "ABC", "DEF", "GHI", "JKL", "MNO" var2 = 2, 0, 4 repeat 3 mes var1.var2.cnt ; var1の要素にvar2の要素を指定したい… loop stop | |||
|
そう。よく見てみると、変数自体は2次元だけでも、文字列としては1次元配列であるのに 「変数.X.X」といった2次元の形式となっているからダメなんですね。 CやJAVA、VBのように要素指定の開始と終了に区切りがあれば要素指定部にも配列を使えますが、 HSPだと開始を示す「.要素」だけであるために配列指定は出来ないのです。 さて、「どうしても配列変数の値を配列変数の要素に指定できないのか」というと、そうではありません。 指定したい配列変数の値を一旦、別変数の要素0に入れてやり、ソレを要素としてやればいいのです。 書いただけでは分かりにくいかもしれませんので、先ほどのサンプルで書いておきましょう。 | |||
sdim var1, 4, 5 dim var2, 3 var1 = "ABC", "DEF", "GHI", "JKL", "MNO" var2 = 2, 0, 4 repeat 3 temp = var2.cnt ; 退避 mes var1.temp ; これで1次元配列の指定となる loop stop | |||
|
HSP3からは、上記の書き方も上位互換性として使用することができますが、 今回の問題を解消すべく別言語と同様の()記述による書き方が可能となりました。 書き方が変わっただけでなく、カッコには計算式の記述も行え、結果値を要素として使用できますので、 上記スクリプトのいったん退避させる必要もなく、下記の記述でOKです。 | |||
sdim var1, 4, 5 dim var2, 3 var1 = "ABC", "DEF", "GHI", "JKL", "MNO" var2 = 2, 0, 4 repeat 3 mes var1(var2.cnt) loop stop |