現在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
Debug.Print line
にブレークポイントを置いてステップ実行してみてください。
本当に全行一気に読み込んでいますか?
試したのですが、本当に全行読み込まれています。
改行コードがLFとか・・・・
いなさん、id_rsa+ さん
早急な回答ありがとうございます。
「改行コードがLFとか・・・・」だとどのように解決すればいいのですかねー?
1行づつ(行単位で)最後まで(全行)読むようなコードを書いていますね。
で、意図は何ですか?
指定した行だけ読みたい?
http://www.bcap.co.jp/hanafusa/VBHLP/FSO13.htm
CSVファイルを1行単位で処理しようとしてますが、1回目のループで変数にファイルの内容が全部読み込まれてしまって、行単位の処理どころではない状況です。
でかいファイルじゃなければ、全部読み込んでから、
Split関数で配列にいれておけば?
行単位の処理も簡単でしょ。
改行コードが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
にしないとだめかも
Line Input がCRLFを改行コードと認識してそこまで読む仕様なのだから、
本当に入力ファイルの改行コードがLFなら、
改行コードを変更できるテキストエディタ(TeraPad)とかで
CRLF改行に直してからテストしたほうがよいのでは?
それとも、入力データ仕様がLF改行と定められているのですか?
であれば、id_rsa+殿の方法を採用するか、
Line Input # を使用しない方法を模索することになるかも。
>CRLF改行に直してからテストしたほうがよいのでは?
安直に、Replace(hogehoge,vbLF,vbCrLf)するとか
げwミスってるし。。。
'配列があるだけぐるぐる回して出力
For i = 0 to Uboud(Line) - 1
Debug.Print Line(i)
Next
これでお願いします。
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
みなさん、ありがとうございます。
全然知らない、やり方があって勉強になりました。
本当にありがとうございました。
ツイート | ![]() |