TextStreamクラスのSkipメソッド
TextStreamクラスのSkipメソッドは、FileSystemObjectクラスのCreateTextFileメソッドやOpenTextFileメソッドで参照モードで開いたファイルの読み込み位置を指定位置まで移動させます。
ファイルを開く際に読み取りモード(参照モード)でない場合は「エラー54 ファイル モードが不正です」が発生します。
移動できるのは先頭から終端方向のみで、逆方向の終端から先頭側に向かって移動させることはできません。
TextStreamクラスの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。
構文
Sub Skip(Characters As Long)
Characters | 現在の読み込み位置から次の読み込み位置まで読み飛ばす文字数を指定します。 |
事前設定
以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。
FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。
詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。
サンプルコード
一般的なテキストファイルを参照する処理をサンプルで書いています。
テキストファイルを開いて、1文字ずつ読み取り、読み取ったデータが改行コードCRであればSファイルを閉じるコードです。
テキストファイルの全行を読み込む場合はファイル終端を判定するAtEndOfStreamプロパティを使ってテキストファイルの全行ループを行います。
テキストファイルは以下のように3行のデータで、各行に改行コードのCRLFがついているとします。
aaa(CRLF)
bbbb(CRLF)
ccccc(CRLF)
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 32 33 34 35 36 37 38 39 40 41 42 43 44 |
Sub TextStreamSkip() On Error GoTo ERR_LABEL Dim fso As New FileSystemObject '// FileSystemObjectクラス Dim ts As TextStream '// TextStreamクラス Dim sFilePath '// ファイルパス Dim sRead '// ファイルデータ '// ファイルパスを設定 sFilePath = "C:\aaa.txt" '// ファイルを開く Set ts = fso.OpenTextFile(Filename:=sFilePath, IOMode:=ForReading, Create:=False, Format:=TristateFalse) Dim i i = 1 '// ファイルを全行ループ Do While ts.AtEndOfStream <> True '// ファイルから1文字取得 sRead = ts.Read(1) '// 改行コードの場合 If sRead = vbCr Then '// 次のLFの1文字をスキップ Call ts.Skip(1) Else Debug.Print CStr(i) & " : [" & Len(sRead) & "]:[" & sRead & "]" End If i = i + 1 Loop '// ファイルを閉じる ts.Close ERR_LABEL: '// エラー発生時 If Err.Number <> 0 Then '// エラー内容を出力 Debug.Print Err.Number & " " & Err.Description End If End Sub |
実行結果
ファイルから読み取った行データをイミディエイトウィンドウに出力します。
1 : [1]:[a]
2 : [1]:[a]
3 : [1]:[a]
5 : [1]:[b]
6 : [1]:[b]
7 : [1]:[b]
9 : [1]:[c]
10 : [1]:[c]
11 : [1]:[c]
12 : [1]:[c]
13 : [1]:[c]