1. はじめに
今回はVBSCriptで文字コードがUTF-8、改行コードがLFのテキストファイルを読み込む方法について説明したいと思います。
ポイントはADODB.Stream
を利用することです。このオブジェクトを利用すると文字コードや改行コードを指定してファイルを読み書きすることができます。
2. ソースコード
'*********************************************************************
' Purpose: filePathで指定されたファイルをUTF-8、改行コードLFで読み込み、
' 取得した行単位で動的配列のdatatListに設定する
' Inputs: filePath:対象となるファイルパス
' datatList:1行のデータを格納する動的リスト(参照渡し)
' Returns: なし
'*********************************************************************
Sub ReadFile(ByVal filePath, ByRef datatList)
Dim input
Set input = CreateObject("ADODB.Stream")
input.Open ' Stream オブジェクトを開く
input.Type = 2 ' ★ポイント1
input.Charset = "UTF-8" ' ★ポイント2
input.LineSeparator = 10 ' ★ポイント3
input.LoadFromFile filePath ' ★ポイント4
' 対象ファイルから1行ずつ読み込む
Dim line
Dim aryStrings
Do Until input.EOS
line = input.ReadText(-2) ' ★ポイント5
If InStr(1, line, "#") = 1 Then
' WScript.echo("COMMENT.")
Else
dataList.add line
End If
Loop
' Stream を閉じる
input.Close
End Sub
★ポイント1
Type
プロパティにテキストファイルとして開くため2
を指定します。
この値はStreamTypeEnumで定義されています
Stream オブジェクトに保存するデータの種類を表します。
定数 | 値 | 説明 |
---|---|---|
adTypeBinary | 1 | バイナリ データを表します。 |
adTypeText | 2 | 既定値です。Charset で指定された文字セットにあるテキスト データを表します。 |
★ポイント2
Charset
プロパティに文字コードを指定します。今回はUTF-8
を指定します。
★ポイント3
LineSeparator
プロパティに改行コードをLFとするため10
を指定します。
この値はLineSeparatorsEnumで定義されています。
テキスト Stream オブジェクトの行区切りに使われている文字を表します。
定数 | 値 | 説明 |
---|---|---|
adCR | 13 | 改行復帰を示します。 |
adCRLF | -1 | 既定値です。改行復帰行送りを示します。 |
adLF | 10 | 行送りを示します。 |
どうして数がこんなに飛び飛びなんでしょうか、MSさん謎です。
★ポイント4
LoadFromFile
メソッドの引数に対象ファイルのファイルパスを指定します。
★ポイント5
ReadText
メソッドでファイルのデータを読み込みます。メソッドの引数には1行づつ読み込むため-2
を指定します。
この値はStreamReadEnumで定義されています。
Stream オブジェクトから、ストリーム全体、または次の行を読み取るかどうかを表します。
定数 | 値 | 説明 |
---|---|---|
adReadAll | -1 | 既定値です。現在の位置から EOS マーカー方向に、すべてのバイトをストリームから読み取ります。これは、バイナリ ストリームに唯一有効な StreamReadEnum 値です (Type は adTypeBinary)。 |
adReadLine | -2 | ストリームから次の行を読み取ります (LineSeparator プロパティで指定)。 |
3. さいごに
今回はVBSCriptで文字コードがUTF-8、改行コードがLFのテキストファイルを読み込む方法について説明しました。
ADODB.Stream
を利用すれば可能なことが分かったかと思います。
使ってみて分かったのは定数値に順序性がなくていまいちって感じでした。(なぜですかね?MSさん)