電子書籍の厳選無料作品が豊富!

いつもお世話になります。VB2005でテキストファイル(中身は1レコードのみ)をFileOpen関数の
ランダムアクセスを使用し、FileGet関数で値を取得しました。しかし、取得後に続くDo While Not EOF~LOOP内の
処理が実行されません。同じファイルでVB6版で使用したら問題なく実行されたのですが。
どのように対応したらよろしいのでしょうか?
よろしくお願い致します。

ソース

Structure TypeUkeData '(Length = 100)
<VBFixedArray(7), MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Dim b_UkeDate() As Byte  '受付日
<VBFixedArray(7), MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Dim b_UkeTime() As Byte   '受付時刻
<VBFixedArray(3), MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Dim b_UkeCnt() As Byte '件数
<VBFixedArray(79), MarshalAs(UnmanagedType.ByValArray, SizeConst:=80)> Dim b_UkeNaiyo() As Byte '内容

Public Sub Initialize()
ReDim b_UkeDate(7)
ReDim b_UkeTime(7)
ReDim b_UkeCnt(3)
ReDim b_UkeNaiyo(79)
End Sub
End Structure



Sub ReadFile

Dim b_UkeData As TypeUkeData
Dim i_FileNo As Short
Dim i_RecNo As Short


call b_UkeData.Initialize()


i_FileNo = FreeFile()
FileOpen(i_FileNo, "C:\UkeData.tmp", OpenMode.Random, , , 100)

' 最初のレコードを読み込む
i_RecNo = 1
FileGet(i_FileNo, b_UkeData, i_RecNo) ←b_UkeDataに確かに値は入っている


Do While Not EOF(i_FileNo)  ←ループ内の処理に一度も入らず次のFileCloseにいってしまう

CALL SubSpilit(b_UkeData)

' 次のレコードを読み込む
i_RecNo = i_RecNo + 1
FileGet(i_FileNo, b_UkeData, i_RecNo)
Loop

FileClose(i_FileNo)

End Sub

A 回答 (1件)

FileGetをDoループの先頭で処理すればいいのでは ・・・



'ここをコメントアウト
'i_RecNo = 1
'FileGet(i_FileNo, b_UkeData, i_RecNo)

' 0で初期化する
i_RecNo = 0
Do While Not EOF(i_FileNo)
  ' ここで読み込み処理
  i_RecNo += 1
  FileGet(i_FileNo, b_UkeData, i_RecNo)
  CALL SubSpilit(b_UkeData)
  ' ここはコメントアウト
  ' 次のレコードを読み込む
  'i_RecNo = i_RecNo + 1
  'FileGet(i_FileNo, b_UkeData, i_RecNo)
Loop

FileClose(i_FileNo)
    • good
    • 0

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