プロが教えるわが家の防犯対策術!

配列a(256, 256)をまるごとバイナリデータとして書き込みたい場合には
Put #1,,a


a(256, 256)の配列に入った数値のうち、
a(51,51)~a(256,256)
に入った数値のみをバイナリデータとして書き込みたいのですが
どのようにすれば良いですか?


で次元を変更して、この配列の中のデータを消さないままで
a(0,0)~a(50,0)とa(0,0)~a(0,50)
を削除してa(206,206)の配列を作成したいのですが、

ReDim Preserve a(206,206)
とすると
”インデックスが有効範囲にありません”というエラーがでます。

http://hpcgi1.nifty.com/kenzo30/b_cbbs/cbbs.cgi? …

このページにあるように、
ReDim Preserveは一次元配列でしか使えないそうです。


どうすれば一部だけバイナリに書き込めますでしょうか?

A 回答 (1件)

切り出し後のサイズの配列bを作って、bにaの値をコピーしてから



Put #1,b

すりゃ良い。

・Option Base 0の場合

//a(256,256)の配列の添え字は0~255。
//b(206,206)の配列の添え字は0~205。
Dim b(206,206) As Integer
For x = 50 To 255
For y = 50 To 255
b(y - 50,x - 50) = a(y,x)
Next
Next
Put #1,b

・Option Base 1の場合

//a(256,256)の配列の添え字は1~256。
//b(206,206)の配列の添え字は1~206。
Dim b(206,206) As Integer
For x = 51 To 256
For y = 51 To 256
b(y - 50,x - 50) = a(y,x)
Next
Next
Put #1,b

要らないのは、50行50列分なのか、51列51行なのか、良く判らん。

質問文では、Option Baseを0のつもりで書いている部分と1のつもりで書いている部分がゴッチャになってて訳が判らなくなっているので、自分でもう少し整理してみよう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!