[ VBA ] 改行コードがLFでファイル全体が1行として読み込まれる事例

Pocket

ここでは、改行コードの違いによって期待しない動作となることがあるサンプルスクリプトを掲載しています。

OS によって改行コードが違うので、面倒です。他にも色々面倒ですが。。。例えばアレとか、ソレとか。

スポンサーリンク


改行コード(LF)のときファイル全体が1行として読み込まれてしまう

次のサンプルでは読み込みテキストファイルの改行コードがLFのとき、ファイル全体を1行として読み込んでしまいます。

Dim line As String
Open "なにかの.csv" For Input As #1
Do Until EOF(1)
    Line Input #1, line
Loop
Close #1

コンピュータの歴史は意外と古いので、仕方のないこともありますが、面倒です。できれば、改行コードが CRLF(WIndows)LF(Unix)CR(Mac)であろうが、どれも同じように扱うことができてほしいです。

改行コードの違いを吸収するには

次は、改行コードの違いを吸収して、いずれも1行として読み込むサンプルになります。改行コードがLFの場合でも、ファイル全体を1行として扱われることはありません。


Dim fso As New FileSystemObject
Dim ts As TextStream

Dim line As String
Dim items() As String
Dim fp As String

fp = "なにかの.csv"

' ファイルを開く
Set ts = fso.OpenTextFile(fp, ForRreading)

' ファイルの終端まで繰り返し読み込む
Do Until ts.AtEndOfStream

    ' 1行読み込み
    ' 改行コードがLFでも1行と認識される
    line = ts.ReadLine

    ' 読み込んだ文字列をカンマで分割して配列に格納する
    items = Split(line, ",")

    ' 読み込んだ配列の最大のインデックス(配列の要素数ではないアルヨ)
    Debug.Print UBound(items)

    ' 何か処理する
    Debug.Print items(0)

Loop

' ファイルを閉じる
ts.Close
スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>