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

解決


ああ  2005-07-29 02:22:16  No: 123826

現在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-29 02:28:39  No: 123827

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


ああ  2005-07-29 02:30:27  No: 123828

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


id_rsa+  2005-07-29 02:39:01  No: 123829

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


ああ  2005-07-29 02:44:37  No: 123830

いなさん、id_rsa+ さん

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

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


もげ  2005-07-29 02:45:12  No: 123831

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

で、意図は何ですか?

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


ああ  2005-07-29 02:53:22  No: 123832

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


id_rsa+  2005-07-29 02:58:13  No: 123833

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


phantom  2005-07-29 03:06:10  No: 123834

改行コードが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-29 03:07:30  No: 123835

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


いな  2005-07-29 03:16:52  No: 123836

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

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


phantom  2005-07-29 03:17:08  No: 123837

げwミスってるし。。。

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

これでお願いします。


魔界の仮面弁士  2005-07-29 03:18:00  No: 123838

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-29 04:29:32  No: 123839

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

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

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


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

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






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