固定長の読み込みについて

解決


相原  2007-01-24 00:17:09  No: 134974

お世話になります。相原と申します。
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


大吉末吉  2007-01-24 01:25:32  No: 134975

<VBFixedArray(2)> 
これだと、0〜2の3要素(3バイト)になるのではありませんか?


相原  2007-01-24 02:32:08  No: 134976

相原です。大吉末吉さんありがとうございます。
VBFixedArray(2)をVBFixedArray(1)にするということでしょうか?
それでも同じエラーが出てしまいます。
ほかにおかしいところがあればご指摘願います。


大吉末吉  2007-01-24 03:14:04  No: 134977

エラーが出る前に、読み込んだデータがどうなっているか確認してますか?

もし、
-------------
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
-----------------------------------------
とかでは?

#この場合、ファイルの最後の行の後に改行が無いとやはりエラーでしょうね。


相原  2007-01-25 02:23:21  No: 134978

いろいろとお手数をお掛けしました。
ご指摘いただいたとおり、ファイルの最後の行の後
に改行が無いためのエラーでした。
本当に助かりました。ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加