Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6203 / 13644 ツリー ←次へ | 前へ→

【46618】レコードセットのEOFについて なた 07/2/8(木) 9:49 質問[未読]
【46619】Re:レコードセットのEOFについて ハチ 07/2/8(木) 10:19 回答[未読]
【46621】Re:レコードセットのEOFについて なた 07/2/8(木) 10:43 質問[未読]
【46627】Re:レコードセットのEOFについて ハチ 07/2/8(木) 14:00 発言[未読]
【46628】Re:レコードセットのEOFについて りん 07/2/8(木) 14:48 発言[未読]
【46630】Re:レコードセットのEOFについて なた 07/2/8(木) 15:16 お礼[未読]
【46632】Re:レコードセットのEOFについて なた 07/2/8(木) 17:20 お礼[未読]

【46618】レコードセットのEOFについて
質問  なた E-MAIL  - 07/2/8(木) 9:49 -

引用なし
パスワード
   お世話になっております。

レコードセットの最後の行ではないのにEOFが
なぜかTRUEになってしまいすぐにループを抜けてしまいます。
他のテキストファイルをすると上手く出来たりするのですが、
安定していません。
よい調べる方法などあれば是非教えてください。
よろしくお願いいたします。

Dim buf As String
Const MyF As String = "D:\VBA\O3000.nc"
Dim CQ As String
Dim hh As String
  
Dim Fnum As Long
  

  CQ = 0
  

'全工具一覧
  Fnum = FreeFile()
  
  Open MyF For Input Access Read As #1
  Do Until EOF(Fnum)
    Line Input #1, buf
    If Left$(buf, 1) = "N" Then
      '工具文字列取得
      Call kougumei(buf)

      CQ = CQ + 1
    End If

  Loop

  Close #1:

【46619】Re:レコードセットのEOFについて
回答  ハチ  - 07/2/8(木) 10:19 -

引用なし
パスワード
   ▼なた さん:
>お世話になっております。
>
>レコードセットの最後の行ではないのにEOFが
>なぜかTRUEになってしまいすぐにループを抜けてしまいます。
>他のテキストファイルをすると上手く出来たりするのですが、
>安定していません。
>よい調べる方法などあれば是非教えてください。
>よろしくお願いいたします。
>
>Dim buf As String
>Const MyF As String = "D:\VBA\O3000.nc"
>Dim CQ As String
>Dim hh As String
>  
>Dim Fnum As Long
>  
>
>  CQ = 0
>  
>
>'全工具一覧
>  Fnum = FreeFile()
>  
>  Open MyF For Input Access Read As #1
>  Do Until EOF(Fnum)
>    Line Input #1, buf
>    If Left$(buf, 1) = "N" Then
>      '工具文字列取得
>      Call kougumei(buf)
>
>      CQ = CQ + 1
>    End If
>
>  Loop
>
>  Close #1:

FnumにFreeFile()を入れてるのに
#1で開いてるからでは?
#1の箇所を、#Fnumに書き直してみてください。

【46621】Re:レコードセットのEOFについて
質問  なた E-MAIL  - 07/2/8(木) 10:43 -

引用なし
パスワード
   ▼ハチ さん:
>▼なた さん:
>>お世話になっております。
>>
>>レコードセットの最後の行ではないのにEOFが
>>なぜかTRUEになってしまいすぐにループを抜けてしまいます。
>>他のテキストファイルをすると上手く出来たりするのですが、
>>安定していません。
>>よい調べる方法などあれば是非教えてください。
>>よろしくお願いいたします。
>>
>>Dim buf As String
>>Const MyF As String = "D:\VBA\O3000.nc"
>>Dim CQ As String
>>Dim hh As String
>>  
>>Dim Fnum As Long
>>  
>>
>>  CQ = 0
>>  
>>
>>'全工具一覧
>>  Fnum = FreeFile()
>>  
>>  Open MyF For Input Access Read As #1
>>  Do Until EOF(Fnum)
>>    Line Input #1, buf
>>    If Left$(buf, 1) = "N" Then
>>      '工具文字列取得
>>      Call kougumei(buf)
>>
>>      CQ = CQ + 1
>>    End If
>>
>>  Loop
>>
>>  Close #1:
>
>FnumにFreeFile()を入れてるのに
>#1で開いてるからでは?
>#1の箇所を、#Fnumに書き直してみてください。

ご指摘ありがとうございました。
ただ、#Fnumにしても現象かわりませんでした。
2つのテキストファイルをテストしてみていて
一つはOKで一つは駄目なんです。
テキストファイルの方に"ゴミ?(EOFコード?)"みたいなのがあって、
それが原因などという事は考えられるのでしょうか?
すいません、素人で突拍子もない事をいっているかもしれませんが。
どうにか調べる方法などあれば教えてください。

【46627】Re:レコードセットのEOFについて
発言  ハチ  - 07/2/8(木) 14:00 -

引用なし
パスワード
   ▼なた さん:
>ご指摘ありがとうございました。
>ただ、#Fnumにしても現象かわりませんでした。
>2つのテキストファイルをテストしてみていて
>一つはOKで一つは駄目なんです。
>テキストファイルの方に"ゴミ?(EOFコード?)"みたいなのがあって、
>それが原因などという事は考えられるのでしょうか?
>すいません、素人で突拍子もない事をいっているかもしれませんが。
>どうにか調べる方法などあれば教えてください。

ゴミをEOFと誤認するというのは、自分は聞いたことないです。
Scripting.FileSystemObjectのTextStreamでも
同じ処理ができますので、そちらでやってみてはどうでしょうか?
ググれば、サンプルもたくさん出てきますよ。

ところで、CQはString型なのに
CQ=CQ + 1というのはおかしいです。
本当に読み込み部分での不具合なのかも、
確認したほうが良いのでは?

【46628】Re:レコードセットのEOFについて
発言  りん E-MAIL  - 07/2/8(木) 14:48 -

引用なし
パスワード
   なた さん、こんにちわ。

>>>レコードセットの最後の行ではないのにEOFが
>>>なぜかTRUEになってしまいすぐにループを抜けてしまいます。
>>>他のテキストファイルをすると上手く出来たりするのですが、
>>>安定していません。
1.改行コードがvbCrLfではなくて、vbLf(Macや自動計測装置由来のデータでたまにあります)

2.EOFコード(Chr(26))が文字列のどこかに入っている


このどちらかではないでしょうか?(昔、両方引っかかったことがあるので)

【46630】Re:レコードセットのEOFについて
お礼  なた E-MAIL  - 07/2/8(木) 15:16 -

引用なし
パスワード
   ▼りん さん:
>なた さん、こんにちわ。
>1.改行コードがvbCrLfではなくて、vbLf(Macや自動計測装置由来のデータでたまにあります)
>
>2.EOFコード(Chr(26))が文字列のどこかに入っている
>
>
>このどちらかではないでしょうか?(昔、両方引っかかったことがあるので)

やっぱりそうですよね。
この失敗しているテキストデータというのがNC工作機械から
とったデータなのでやはりそういうコードが
入っているんですよね。
教えていただいた(chr(26))の探し方や、対処方法を
少し自分で調べてみます。
親切に教えていただき感謝いたします。

【46632】Re:レコードセットのEOFについて
お礼  なた E-MAIL  - 07/2/8(木) 17:20 -

引用なし
パスワード
   ▼りん さん:
>>なた さん、こんにちわ。
>>1.改行コードがvbCrLfではなくて、vbLf(Macや自動計測装置由来のデータでたまにあります)
>>
>>2.EOFコード(Chr(26))が文字列のどこかに入っている

▼ハチ さん:
>>Scripting.FileSystemObjectのTextStreamでも
>>同じ処理ができますので、そちらでやってみてはどうでしょうか?

りんさん、ハチさんご親切にありがとうございました。
EOFコードを探してみるやり方でも可能だと思いましたが、
素人で調べるのにすごく時間を使ってしまいそうだったので、
今回は”Scripting.FileSystemObjectのTextStream”にて
作成し直してみました。
結果、2つのファイルとも問題なくレコードの最後まで
行くことが出来ました。
本当にありがとうございました。

6203 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free