ファイルを開く


kayo  2007-10-21 00:26:46  No: 99602

はじめまして。

フィルを開いて、listviewにデータを表示させようと思います。
下記のプログラムを実行すると、
「ファイルにこれ以上データがありません」と
エラーが出てしまいます。
このような、場合はどうのように対処したら良いのか?
教えて頂けないでしょうか?
宜しくお願いします。

環境はVB6.0です
Private Sub mnuFileOpen_Click()  '開く
    Dim filename As String
    Dim lv As ListItem
    Dim name, yubin, addless, tel, mail As String '変数宣言
    
    CommonDialog.Filter = "テキストファイル(*.txt)|*.txt|" & "すべてのファイル(*.*)|*.*|"
    CommonDialog.ShowOpen                     '開くのダイアログを表示
    filename = CommonDialog.filename          'ファイル名を設定
    ListView1.ListItems.Clear                 'ファイルをクリアー
    Open filename For Input As #1             'ファイルを開く
    
        Do While Not EOF(1)
            Input #1, name, yubin, addless, tel, mail  'ファイルを順に呼び込む
            Set lv = ListView1.ListItems.Add()
                lv.Text = name           ' 名前
                lv.SubItems(1) = yubin   '郵便番号
                lv.SubItems(2) = addless '住所
                lv.SubItems(3) = tel     '電話番号
                lv.SubItems(4) = mail    'メール
         Loop
        
    Close #1                  'ファイルを閉じる
    Henkou = False            '変更なし
Err:
End Sub


oct  2007-10-21 02:40:07  No: 99603

最初に思いつくことは項目数が足りない行や多い行がある...でしょう。

1行はname, yubin, addless, tel, mail  と5ヶのはずが
例えばtelが無い行があるとか、半角カンマが多いや少ないとか。
英語表記のaddlessなどだと半角カンマが含まれたりします。
Tokyo JAPAN  と言う行と   Tokyo,JAPAN  と言う行が有ったりすると
ファイル全体の項目数が5の整数倍にならない事が出てきます。


kayo  2007-10-21 03:10:45  No: 99604

oct様

早速の、助言ありがとうございます。
ご指摘して頂いたことを参考にして見たのですが、
エラーは改善されませんでした。

エラーは、Input #1, name, yubin, addless, tel, mail  'ファイルを順に呼び込むのところで出ております。
内容は、「カーソル下にある識別子が認識できません」と
出ております。


oct  2007-10-21 03:25:03  No: 99605

最初の質問のエラーが異なりますね?

最初:「ファイルにこれ以上データがありません」

今回:「カーソル下にある識別子が認識できません」


kayo  2007-10-21 03:44:00  No: 99606

oct様  誤解を招く記載で申し訳あリません。

      「カーソル下にある識別子が認識できません」のエラーは自己解決い        たしました。
        ですが、最初の「ファイルにこれ以上データがありません」が
        解決しません。
        試行錯誤、いろいろ試しているのですが、解決策が思いつきませ          ん。


oct  2007-10-21 06:56:39  No: 99607

最初のエラーはまだ未解決だそうですが、
「カーソル下にある識別子が認識できません」のエラーは何が原因で
解決策は何だったのか後学の為に教えて下さい。

本当にファイルに問題は無いのでしょうか?
下記で項目数を確認して見て下さい。
コードは手打ちなのでミスは適宜修正して下さい。

Dim tmp As string
Dim dat()  As string
Dim kazu As Integer   '各行の項目数
Dim fp As Integer     '行番号

Open filename For Input As #1 
Open "kazu.txt" For Output As #2 

'Ubound(dat) ==> 配列の指定された次元で使用できる添字の最大値
'実際の項目数は  Ubound(dat)  +  1

fp =0
Do
 Line Input #1,tmp
 fp = fp +1
 tmp = Replace(tmp,Chr(34),"")  'これは不要かも
 dat = Split(dat,",")           '半角カンマ区切りの1行の項目数を取得

 if Ubound(dat) <> 4 then
    Print #2,fp & " : " & Ubound(dat)
 end if

Loop Until Eof(1)
Close #1
Close #2


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

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






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