csvファイルを読み込み、条件文を動作するには?


zooo  2008-10-22 15:42:37  No: 140701  IP: 192.*.*.*

2列10行のcsvファイルのデータを一行ずつ取り込んで、
列の数値の大きさによって、判断を変えるというプログラムを作っています。

しかし、動いてくれません・・・ご教授よろしくお願いします。

  Dim buf As String
    Dim FileNo As Integer   'ファイル番号
    Dim lastdata() As String
    
    Const FileName = "sample.csv"
    FileNo = FreeFile 
    Open FileName For Input As FileNo

    Do Until EOF(FileNo)
        Line Input #FileNo, buf
        lastdata = Split(buf, ",")
        If lastdata(1) < lastdata(0) Then
                Call Command2_Click
                Label1.Caption = lastdata(0)
        Else
                Call Command3_Click
                 Label1.Caption = lastdata(1)    
        End If   
    Loop
    Close #FileNo

編集 削除
zooo  2008-10-22 15:45:34  No: 140702  IP: 192.*.*.*

追加です。

csvファイルの一行目しか取り込んでいないようです。

編集 削除
zooo  2008-10-22 15:45:42  No: 140703  IP: 192.*.*.*

追加です。

csvファイルの一行目しか取り込んでいないようです。

編集 削除
特攻隊長まるるう  2008-10-22 16:22:08  No: 140704  IP: 192.*.*.*

> csvファイルの一行目しか取り込んでいないようです。
ちゃんと全行読み込めているようですが?
1行1行ステップ実行しながら変数の中身を確認してみてはいかが?

Label1.Caption を共通で使ってたり
Command2_Click, Command3_Click の処理に問題があるのでは?

編集 削除
zooo  2008-10-22 16:37:04  No: 140705  IP: 192.*.*.*

ありがとうございます。
特攻隊長まるるうさんがおっしゃったように、全行取り込めているようです。

Command2_Click, Command3_Click の処理は、ぞれぞれ映像を表示するように設定しています。

オブジェクトにCommand2, Command3をおいているのですが、それをクリック
してもちゃんと動作するので、そこには問題がないように思われます。

If文が一行目の処理しかしていないようです。

編集 削除
zooo  2008-10-22 16:37:06  No: 140706  IP: 192.*.*.*

ありがとうございます。
特攻隊長まるるうさんがおっしゃったように、全行取り込めているようです。

Command2_Click, Command3_Click の処理は、ぞれぞれ映像を表示するように設定しています。

オブジェクトにCommand2, Command3をおいているのですが、それをクリック
してもちゃんと動作するので、そこには問題がないように思われます。

If文が一行目の処理しかしていないようです。

編集 削除
subaru  2008-10-22 17:54:11  No: 140707  IP: 192.*.*.*

csvファイルの列の数値というのは桁数同じなんでしょうか?

>列の数値の大きさによって、判断を変えるというプログラムを作っています。
提示のコードだと数値の比較ではなく文字列の比較なので
例えば、"11"と"101"を比較した場合は"11"の方が大きな値とみなされますが
その辺大丈夫ですかね?

編集 削除
zooo  2008-10-22 20:59:26  No: 140708  IP: 192.*.*.*

subaruさんありがとうございます。
ファイルのなかは一桁なので問題はないかと思います。

しかし、文字列だとそのような比較をするとは知りませんでした。
ありがとうございました。

編集 削除
特攻隊長まるるう  2008-10-23 11:20:04  No: 140709  IP: 192.*.*.*

> If文が一行目の処理しかしていないようです。 
ちゃんと全行比較されているようですが?
1行1行ステップ実行しながら変数の中身を確認してみてはいかが?

編集 削除
zooo  2008-10-23 14:08:49  No: 140710  IP: 192.*.*.*

特攻隊長まるるうさんありがとうございます。
Do Until文の処理が早すぎたようで、sleepをおいたら動作しました。

みなさん色々ありがとうございました。

編集 削除
YuO  2008-10-23 15:35:12  No: 140711  IP: 192.*.*.*

> Do Until文の処理が早すぎたようで、sleepをおいたら動作しました。

Captionなどは最後に代入した物が有効なので,
途中の物が上書きされていた,ということはありませんか?

一行読んで,表示して,時間が経ったら次の行,というようなことがやりたいのであれば,
タイマーを使って,タイマーのイベントハンドラ中で,ループの1回分の処理を行うなど,
待つ処理の間はWindowsに表示処理等をさせるようにしてください。
# タイマーにしたらタイマーにしたで再入問題などが発生しますが。

編集 削除