VB系言語は他の言語とはテキストファイルのEOF(ファイルの終わり)のタイミングが違う。
例えば、10レコードあったとする。通常の言語、例えばCOBOLだと11件目を読み込んだとき、つまり最終レコードの次のレコードを読み込もうとして、なければEOFとなるが、VBAでは10件目を読み込んだとき、つまり最終レコードを読み込んだ時点でEOFになる。
これは、ファイルを読み込むアルゴリズムに影響がある。
通常のもの、例えばCOBOLなどだと
・ファイルオープン
・ファイル読み込み
・繰り返し:EOFになるまで(COBOL だと AT END まで)
(処理)
ファイル読み込み
-繰り返し終わり
・ファイルクロース
となる。
しかし、VBAだと
・ファイルオープン
・繰り返し
ファイル読み込み
(処理)
-繰り返し終わり:EOFになるまで
・ファイルクロース
となる。
ただし、これはテキストファイルに限った話である。VB系言語でも、データベースアクセスでは話が違う。DAOなどを使った場合、最終レコードの次のレコードを読み込もうとして、なければEOFとなるのである。
VBの負の遺産と言えるだろう。別の命令かメソッドを作って、現状の命令を推奨しないようにしていく方がいいかと思う。
例えば、10レコードあったとする。通常の言語、例えばCOBOLだと11件目を読み込んだとき、つまり最終レコードの次のレコードを読み込もうとして、なければEOFとなるが、VBAでは10件目を読み込んだとき、つまり最終レコードを読み込んだ時点でEOFになる。
これは、ファイルを読み込むアルゴリズムに影響がある。
通常のもの、例えばCOBOLなどだと
・ファイルオープン
・ファイル読み込み
・繰り返し:EOFになるまで(COBOL だと AT END まで)
(処理)
ファイル読み込み
-繰り返し終わり
・ファイルクロース
となる。
しかし、VBAだと
・ファイルオープン
・繰り返し
ファイル読み込み
(処理)
-繰り返し終わり:EOFになるまで
・ファイルクロース
となる。
ただし、これはテキストファイルに限った話である。VB系言語でも、データベースアクセスでは話が違う。DAOなどを使った場合、最終レコードの次のレコードを読み込もうとして、なければEOFとなるのである。
VBの負の遺産と言えるだろう。別の命令かメソッドを作って、現状の命令を推奨しないようにしていく方がいいかと思う。