15
18

More than 5 years have passed since last update.

VBScriptでUTF-8、改行コードLFのファイルを読み込む

Posted at

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さん)

15
18
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18