Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした