メイン画像

VBScript でファイル入出力する方法

VBScript でファイル入出力する方法


VBScriptでファイル入出力をするには、Scripting.FileSystemObject(俗に言うFSOってやつ)を使う。

VBScriptそのものには、従来のVBやVBAにあるファイル入出力機能(FreeFileOpen ~ For ~ As #Printなど)はないので注意すること。

また、FileSystemObjectで扱えるテキストファイルの文字コードは、次の2種類だけとなる。

  • Unicode形式(UTF-16 LE)
  • Ascii形式(シフトJIS)

もし、UTF-8などの別の文字コードを扱いたければ、FileSystemObjectではなくADODB.Streamを使う必要がある。

ファイル読み込み

OpenTextFileでファイルを開くと、TextStream オブジェクトが返される。
TextStream オブジェクトを介して文字列を読み取る。

  1. filename - 必須 - ファイルパス
  2. iomode - 任意 - どのモードでファイルを開くか
  3. create - 任意 - filename で指定したファイルが存在しない場合に、新しいファイルを作るかどうか
  4. format - 任意 - ファイルの文字コード
'FileSystemObjectのオブジェクトを生成
Dim vFso
Set vFso = CreateObject("Scripting.FileSystemObject")

'ファイルを開く
Dim vTs
Set vTs = vFso.OpenTextFile("C:\path\to\file.txt", 1)

'ファイル全体を読み取る
Dim vBuf
vBuf = vTs.ReadAll

'ファイルを閉じる
vTs.Close

Set vTs = Nothing
Set vFso = Nothing

ファイル全体ではなく1行単位で読み取るには、ReadLineメソッドを使う。

'ファイルの最後に到達する(AtEndOfStreamプロパティがTrueを返す)まで繰り返す
Do While vTs.AtEndOfStream <> True
  Dim vLine
  vLine = ts.ReadLine   '1行読み取る
Loop

ファイル書き込み

CreateTextFileまたはOpenTextFileでファイルを作ると、TextStream オブジェクトが返される。 TextStream オブジェクトを介して文字列を書き込む。

CreateTextFileの引数

  1. filename - 必須 - ファイルパス
  2. overwrite - 任意 - filename で指定したファイルがあった場合、そのファイルを上書きできるかどうか
  3. unicode - 任意 - ファイルの文字コード。True を指定すると Unicode形式、False を指定すると Ascii形式。
'新しいファイルを作る(ファイルが存在する場合は上書きする)
.CreateTextFile("C:\path\to\file.txt", True)

'新しいファイルを作る(ファイルが存在する場合は上書きしない)
'ファイルが存在する場合 → Microsoft VBScript 実行時エラー: 既に同名のファイルが存在しています。
.CreateTextFile("C:\path\to\file.txt", False)

'書き込みモードでファイルを開く(ファイルが存在しない場合は新しく作る)
.OpenTextFile("C:\path\to\file.txt", 2, True)

'書き込みモードでファイルを開く(ファイルが存在しない場合は作成しない)
'ファイルが存在しない場合 → Microsoft VBScript 実行時エラー: ファイルが見つかりません。
.OpenTextFile("C:\path\to\file.txt", 2, False)

'追記モードでファイルを開く(ファイルが存在しない場合は新しく作る)
.OpenTextFile("C:\path\to\file.txt", 8, True)

'追記モードでファイルを開く(ファイルが存在しない場合は作成しない)
'ファイルが存在しない場合 → Microsoft VBScript 実行時エラー: ファイルが見つかりません。
.OpenTextFile("C:\path\to\file.txt", 8, False)

書き込みモードと追記モードの違い。 書き込みモードは、既存のファイルを新しいデータで置き換える。
追記モードは、既存のファイルの最後に書き込む。

CreateTextFileを使う場合

CreateTextFileは読み取りまたは書き込みに使えるTextStreamを返す。

Dim vFso
Set vFso = CreateObject("Scripting.FileSystemObject")

'新しくファイルを作る(すでにファイルがあったら上書きする)
Dim vTs
Set vTs = vFso.CreateTextFile("C:\path\to\file.txt", True)

'ファイルに文字列を書き込む
vTs.Write "書き込む文字列(Write)"

'ファイルに文字列と改行文字を書き込む
vTs.WriteLine "書き込む文字列(WriteLine)"

'ファイルを閉じる
vTs.Close

Set vTs = Nothing
Set vFso = Nothing

OpenTextFileを使う場合

OpenTextFileは指定したモード(読み取り、書き込み(上書き)、追記)のTextStreamを返す。

Dim vFso
Set vFso = CreateObject("Scripting.FileSystemObject")

'書き込みモードでファイルを開く(ファイルがなければ新しく作る)
Dim vTs
Set vTs = vFso.OpenTextFile("C:\path\to\file.txt", 2, True)

'ファイルに文字列を書き込む
vTs.Write "書き込む文字列(Write)"

'ファイルに文字列と改行文字を書き込む
vTs.WriteLine "書き込む文字列(WriteLine)"

'ファイルを閉じる
vTs.Close

Set vTs = Nothing
Set vFso = Nothing

サンプル集

一時フォルダに一時ファイルを作る

'''
''' 一時ファイルに書き込みます。
'''
''' @param {string} piTextToWrite - 書き込む内容
''' @return {string} 一時ファイルのパス
'''
Function WriteTempFile(ByVal piTextToWrite)

  '戻り値初期化
  WriteTempFile = ""

  'GetSpecialFolder用の定数
  'Tempフォルダ
  Const TemporaryFolder = 2

  With CreateObject("Scripting.FileSystemObject")
    '一時フォルダに保存する一時ファイルのパスを生成
    Dim vTempFilePath
    vTempFilePath = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName())

    '上書き許可、Unicode形式でファイルを作る
    With .CreateTextFile(vTempFilePath, True, True)
      .WriteLine piTextToWrite
      .Close
    End With

    '一時ファイルのパスを返す
    WriteTempFile = vTempFilePath
  End With
End Function

アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事