
TextStreamオブジェクトのAtEndOfLineプロパティについてです。
AtEndOfLineプロパティ
概要
ファイルの行の末尾の直前にファイルポインターが
ある場合は➡True
ない場合は➡False
を返します。
構文
TextStreamObject.AtEndOfLine
VBAサンプル
行末の列番号を取得
まずFileSystemObjectをセットして、FileSystemObjectのOpenTextFileメソッドでForReading(読込モード)に設定して指定したファイルを開きTextStreamオブジェクトが返るのでセットします。
あとはDo Until~LoopでTextStreamオブジェクトのAtEndOfStreamプロパティがTrueになるまで、If文とTextStreamオブジェクトのAtEndOfLineプロパティで行末かの判定且つ、textStreamオブジェクトのReadメソッドで文字を判定してTrueの場合は変数cntをプラス1します。
次のElseIfは行末ではなかったらTextStreamオブジェクトのSkipメソッドで文字をスキップさせてます。
Elseは行末だったらなのでTextStreamオブジェクトのReadLineメソッドで1行下げます。
この工程をファイルの末尾まで繰り返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | Sub test() '変数 Dim wd: wd = "A" '←今回検索する文字 Dim fso As Object, ts As Object Dim cnt As Integer 'FileSystemObjectをセット Set fso = CreateObject("Scripting.FileSystemObject") 'FileSystemObjectのOpenTextFileメソッドでTextStreamオブジェクトをセット Set ts = fso.OpenTextFile("D:\sample\test.txt", ForReading) 'TextStreamオブジェクトのAtEndOfStreamプロパティがTrueになるまで繰り返す Do Until ts.AtEndOfStream 'TextStreamオブジェクトのAtEndOfLineプロパティで行末を判定且つ 'TextStreamオブジェクトのReadメソッドで文字を判定 If ts.AtEndOfLine = False And ts.Read(1) = wd Then 'cntをプラス1する cnt = cnt + 1 ElseIf ts.AtEndOfLine = False Then '文字をスキップする ts.Skip (1) Else '1行下げる ts.ReadLine End If Loop ts.Close '結果を表示 Debug.Print cnt End Sub |
【結果】
ファイル内のAという文字の個数を取得します。
行末の列番号はこちらで取得できます。