お世話になります。相原と申します。
VB.NET2005でプログラムを組んでいるのですが、
固定長を読み込むところで分からなくて困っています。
たとえば
------------------------
SSKKJJ
AABBCC
IIFFSS
------------------------
というデータを構造体に格納しようとしたのですが、
2回目のFileSystem.FileGet(FileNum, pos(I - 1))
のところで
配列のオフセットおよび長さが範囲を超えているか、カウンタがソース コレクションのインデックスから最後までの要素の数より大きい値です。
というエラーが出てしまいます。
申し訳ありませんが、正しい方法を教えていただけないでしょうか?
宜しくお願いいたします。
Public Class Form1
Structure DataCell
<VBFixedArray(2)> Public a() As Byte
<VBFixedArray(2)> Public b() As Byte
<VBFixedArray(2)> Public c() As Byte
End Structure
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim I As Integer
Dim FileNum As Integer = FileSystem.FreeFile
FileSystem.FileOpen(FileNum, "c:\test.txt", OpenMode.Random, , , Len(New DataCell()))
Dim pos() As DataCell
I = 1
Do While Not EOF(FileNum)
ReDim pos(I)
FileSystem.FileGet(FileNum, pos(I - 1))
I = I + 1
Loop
End Sub
End Class
<VBFixedArray(2)>
これだと、0〜2の3要素(3バイト)になるのではありませんか?
相原です。大吉末吉さんありがとうございます。
VBFixedArray(2)をVBFixedArray(1)にするということでしょうか?
それでも同じエラーが出てしまいます。
ほかにおかしいところがあればご指摘願います。
エラーが出る前に、読み込んだデータがどうなっているか確認してますか?
もし、
-------------
SSKKJJ
AABBCC
IIFFSS
-------------
これが、1レコードが
「データ6バイト+復改行コード2バイトで、1行8バイトのデータ」だとすると、
-----------------------------------------
<VBFixedArray(2)> Public a() As Byte
<VBFixedArray(2)> Public b() As Byte
<VBFixedArray(2)> Public c() As Byte
-----------------------------------------
では、1回で読み込まれるのは、9バイト、
-----------------------------------------
<VBFixedArray(1)> Public a() As Byte
<VBFixedArray(1)> Public b() As Byte
<VBFixedArray(1)> Public c() As Byte
-----------------------------------------
では、1回で読み込まれるのは、6バイト
なので、どんどんずれてくる(エラー以前に、そもそも、ちゃんと読めていない)のではありませんか?
-----------------------------------------
<VBFixedArray(1)> Public a() As Byte
<VBFixedArray(1)> Public b() As Byte
<VBFixedArray(1)> Public c() As Byte
<VBFixedArray(1)> Public kaigyou() As Byte
-----------------------------------------
とかでは?
#この場合、ファイルの最後の行の後に改行が無いとやはりエラーでしょうね。
いろいろとお手数をお掛けしました。
ご指摘いただいたとおり、ファイルの最後の行の後
に改行が無いためのエラーでした。
本当に助かりました。ありがとうございました。
ツイート | ![]() |