[リストへもどる]
一括表示

投稿時間:2004/08/06(Fri) 19:38
投稿者名:みなこ
URL :
タイトル:
EOF が効かない
初めて投稿させていただきます。
よろしくお願い致します。

テキストファイルを全部読み込みたいのでこのように↓してみました。


  Open gstrDir & "Tags.txt" For Input As #intFnum

    Do Until EOF(intFnum)
        Input #intFnum, strTag(i), strDscr(i)
        
        If strTag(i) = "" Then GoTo LoopExit

        i = i + 1
        ReDim Preserve strTag(i)
        ReDim Preserve strDscr(i)
        
    Loop


しかし、「ファイルにこれ以上データがありません。62」のエラーが出てしまいます。
EOFを検知してくれていないのでしょうか?
使い方がまずいのですか?(今までもこのように書いていましたが、エラーは出ませんでした。)

よろしくお願い致します。

投稿時間:2004/08/06(Fri) 19:52
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: EOF が効かない
>         Input #intFnum, strTag(i), strDscr(i)

入力ファイルの内容を確認して下さい。
1行に strTag(i) と strDscr(i) の2ケがセットでありますか?
各項目の中に半角のカンマ ( , ) やダブルコーティション ( "" ) が含まれたり
していませんか? 含まれていると1行の項目数が2ヶ以上と言う事になります。

総項目数が偶数(2の倍数)で無ければ
「ファイルにこれ以上データがありません。62」のエラーが出ると思います。

投稿時間:2004/08/06(Fri) 20:30
投稿者名:みなこ
URL :
タイトル:
Re^2: EOF が効かない
> 1行に strTag(i) と strDscr(i) の2ケがセットでありますか?
> 各項目の中に半角のカンマ ( , ) やダブルコーティション ( "" ) が含まれたり
> していませんか? 含まれていると1行の項目数が2ヶ以上と言う事になります。
>
> 総項目数が偶数(2の倍数)で無ければ
> 「ファイルにこれ以上データがありません。62」のエラーが出ると思います。

はい。

・データは全て2個セット
・カンマ ( , ) やダブルコーティション ( "" )  は含まれていません。

debug.printで見ていると、最後の行まで読んでいますが
それを最後とプログラムでは認識していません。

投稿時間:2004/08/06(Fri) 21:03
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: EOF が効かない
> ・データは全て2個セット
> ・カンマ ( , ) やダブルコーティション ( "" )  は含まれていません。

見た目でなく検索等して調べられたのでしょうか?
どちらにしてもデータに問題があるかと思います。

半分から以降のデータを削除して試して見るとか?

1行づつ増やしながら試してみるとかすればデータのどこに問題があるか
つかめると思います。

又、Excelで仮のデータを作って試してみればどちらに問題があるかはっきりするかと
思います。

If strTag(i) = "" Then GoTo LoopExit  この部分も気になるのですが一度コメント化
して試してみては。

投稿時間:2004/08/08(Sun) 21:10
投稿者名:みなこ
URL :
タイトル:
Re^4: EOF が効かない
> 見た目でなく検索等して調べられたのでしょうか?
> どちらにしてもデータに問題があるかと思います。

ExcelのデータをCSVに落としています。

Debug.printで確認すると、データは一番最後の行まで読み込んでいますが
その後、エラーが発生しています。

最後の行を消してみるということでしょうか?

投稿時間:2004/08/08(Sun) 22:19
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: EOF が効かない
> ExcelのデータをCSVに落としています。
Excelのセルの中に(データ中), や "" が含まれている可能性があるので
Excel上で  , や "" を検索して使っていないか確認して下さい。

> Debug.printで確認すると、データは一番最後の行まで読み込んでいますが
> その後、エラーが発生しています。
列×行 の数が合わないからデータの最後でエラーが発生しているのです。

データのどの辺に(前の方か後ろの方か), "" (又は問題)があるのか調べる
ためにExcel上で仮に100行なら50行づつにして半分づつ読み込んでみれば
どちらに問題があるか解りますよね。
その前に検索して, "" を使っていないか探して見て下さい。

データの途中に , や "" が含まれていてもそこでエラーが発生する訳ではありません。
, や "" が含まれていた場合 1列が2列としてカウントされるのです。
5列×100行ならデータは500個のはずが501個になるからEOFの位置が合わずエラーが
発生するのです。(最後まで読み込まないと違うか解らないから最後まで読んでいるのです)


# 先の投稿で一部データと出力結果が違っておりました。お詫びして訂正します。

Excel に下記のように書いてCSV形式で保存して下さい。
1    1,1    a
2    1,2"    b
3    1,3    c

下記のコードを実行すると
Private Sub Command1_Click()
    Dim lngDatN    As Long
    Dim intFileNo  As Integer
    Dim dat(2) As String
    lngDatN = 0
    intFileNo = FreeFile
    
    Open "c:\book1.csv" For Input As #intFileNo
    Do Until EOF(intFileNo)
        Input #intFileNo, dat(0), dat(1), dat(2)
        Debug.Print dat(0), dat(1), dat(2)
    Loop
    Close #intFileNo
End Sub

結果下記のように出力されます。(当然エラーが出ます)
1             1,1           a
2             1,2          
b             3             1,3


Excel に下記のように書いてCSV形式で保存して下さい。
1    1    a
2    2    b
3    3    c

実行すると 当然ながら下記のようになります。
1             1             a
2             2             b
3             3             c