CSVファイルを行単位で読み込むには?

解決


ああ  2005-07-28 17:22:16  No: 123826  IP: [192.*.*.*]

現在CSVファイルを行単位で読み込もうとするのですが、全行いっきに読み込まれてしまいます。いろいろ検索したのですが、良い情報が見つかりません。どなたか、ご教授お願い致します。

    Dim line As String
    Dim filepath As String
    filepath = "test.csv"
    Open filepath For Input As #1
    Do Until EOF(1)
        Line Input #1, line
        Debug.Print line
    Loop
    Close #1

test.csvの内容
a,b,c
aa,bb,cc

編集 削除
いな  2005-07-28 17:28:39  No: 123827  IP: [192.*.*.*]

Debug.Print line
にブレークポイントを置いてステップ実行してみてください。
本当に全行一気に読み込んでいますか?

編集 削除
ああ  2005-07-28 17:30:27  No: 123828  IP: [192.*.*.*]

試したのですが、本当に全行読み込まれています。

編集 削除
id_rsa+  2005-07-28 17:39:01  No: 123829  IP: [192.*.*.*]

改行コードがLFとか・・・・

編集 削除
ああ  2005-07-28 17:44:37  No: 123830  IP: [192.*.*.*]

いなさん、id_rsa+ さん

早急な回答ありがとうございます。

「改行コードがLFとか・・・・」だとどのように解決すればいいのですかねー?

編集 削除
もげ  2005-07-28 17:45:12  No: 123831  IP: [192.*.*.*]

1行づつ(行単位で)最後まで(全行)読むようなコードを書いていますね。

で、意図は何ですか?

指定した行だけ読みたい?
http://www.bcap.co.jp/hanafusa/VBHLP/FSO13.htm

編集 削除
ああ  2005-07-28 17:53:22  No: 123832  IP: [192.*.*.*]

CSVファイルを1行単位で処理しようとしてますが、1回目のループで変数にファイルの内容が全部読み込まれてしまって、行単位の処理どころではない状況です。

編集 削除
id_rsa+  2005-07-28 17:58:13  No: 123833  IP: [192.*.*.*]

でかいファイルじゃなければ、全部読み込んでから、
Split関数で配列にいれておけば?
行単位の処理も簡単でしょ。

編集 削除
phantom  2005-07-28 18:06:10  No: 123834  IP: [192.*.*.*]

改行コードがLFのみで全件読み込んでくるなら

    Dim filepath As String    'ファイのパス
    Dim AllLine As String     'ファイル内全データ
    Dim Line As String        '一行分のデータ

    filepath = "test.csv"
    'ファイルを開く
    Open filepath For Input As #1

        '一行(この場合は全部)読み込む
        Line Input #1, AllLine

    Close #1

    '読み込んだデータ(AllLine)を vbLf で切って
    'Line 変数に格納する(Lineは配列になる)
    Line = Split(AllLine, vbLf)

    '配列があるだけぐるぐる回して出力
    For i = 0 to Uboud(Line) - 1
         Debug.Print line
    Next

VB6.0ならこのままでいけるかな。。。テストしてないです。
.NETなら最初の宣言を
    Dim Line() As String
にしないとだめかも

編集 削除
もげ  2005-07-28 18:07:30  No: 123835  IP: [192.*.*.*]

Line Input がCRLFを改行コードと認識してそこまで読む仕様なのだから、
本当に入力ファイルの改行コードがLFなら、
改行コードを変更できるテキストエディタ(TeraPad)とかで
CRLF改行に直してからテストしたほうがよいのでは?
それとも、入力データ仕様がLF改行と定められているのですか?
であれば、id_rsa+殿の方法を採用するか、
Line Input # を使用しない方法を模索することになるかも。

編集 削除
いな  2005-07-28 18:16:52  No: 123836  IP: [192.*.*.*]

>CRLF改行に直してからテストしたほうがよいのでは?

安直に、Replace(hogehoge,vbLF,vbCrLf)するとか

編集 削除
phantom  2005-07-28 18:17:08  No: 123837  IP: [192.*.*.*]

げwミスってるし。。。

    '配列があるだけぐるぐる回して出力
    For i = 0 to Uboud(Line) - 1
         Debug.Print Line(i)
    Next

これでお願いします。

編集 削除
魔界の仮面弁士  2005-07-28 18:18:00  No: 123838  IP: [192.*.*.*]

ADODB.Streamオブジェクトを使って読み込むとか。
これなら、LF改行のデータを行単位で読み込めますし。


With CreateObject("ADODB.Stream")
    .Charset = "Shift_JIS"
    .LineSeparator = 10    'CR=13, LF=10, CRLF=-1
    .Open
    .LoadFromFile "C:\a.txt"
    Do Until .EOS
        '-2=行単位読み込み
        '-1=一括読み込み
        '自然数=文字単位読み込み
        MsgBox .ReadText(-2)
    Loop
    .Close
End With

編集 削除
ああ  2005-07-28 19:29:32  No: 123839  IP: [192.*.*.*]

みなさん、ありがとうございます。

全然知らない、やり方があって勉強になりました。

本当にありがとうございました。

編集 削除