|
おはようございます。
>「filenumber」を「1〜511の範囲で任意のファイル番号を指定する」部分で、
>Byte型が関わってくるんですね。
違います。
>バイト単位での処理かどうかの判断は、
>Openステートメントのようにヘルプに書いてあれば…という認識でいいのでしょうか。
違います。
自分が作るマクロの目的によって、バイト単位にで処理する必要があるときに
バイト型を使用するということです。
>型宣言のときに()をつけるのはどのような役割があるのでしょうか。
>その上で、2行目は何が行われているのでしょうか。
型宣言時に、変数名に()を付ける場合、配列になります。
配列の大きさを指定していない場合、動的配列になり、
後で、Redimステートメントで大きさを指定します。
>その上で、2行目は何が行われているのでしょうか。
配列の大きさ(配列要素の数)を指定しています。
バッファサイズを1024バイト(bufsize=1024)とするとき、
バッファをByte型で宣言している時
Redim buf(bufsize-1) ' つまり Redim buf ( 0 to 1023)
1バイト×1024要素で1024バイトのバッファが確保されます。
バッファがInteger型で宣言しているとき
Redim buf(bufsize \ 2 -1 ) ' つまり Redim buf ( 0 to 511 )
で2バイト×512要素で1024バイトのバッファが確保されます。
このマクロはファイルを1024バイトづつに区切って
読み込みと書き出しを繰り返しています。
で、最後に例えば3バイト残ったとすると、
Byte型のバッファであれば、ちょうと3バイト分のバッファを確保できます。
(Rdim Buf(bufsize-1) で 変数bufsizeの値が3だから)
ところが、Integer型だと、バッファサイズを
Redim buf(bufsize \ 2 -1 )
で確保しているとので、変数bufsizeの値が3だと bufsize \ 2 -1 = 0 ですから
Redim buf( 0 to 0 )
となって、2バイト×1要素=2バイトのバッファサイズしか確保できないことになります。
なので、
If bufsize Mod 2 = 1 Then bufsize = bufsize + 1
で、bufsizeが3の様な奇数のときは、バッファを多めに確保するように調整します。
Mod演算子は、割り算のあまりを計算する演算子です。
bufsize Mod 2 = 1は、bufsizeを2で割った余りが1
ということです。
>「Get」「Put」でヒットしません。
Openステートメントからたどって下さい。
疑問点に答えることが出来たでしょうか。
|
|