スモールデータ集計の技

VBSを使ってExcelやCSVを操作し、ハイレベルなデータ集計技をお伝えします。

テキストファイルの読み出しテンプレート

今回からテキストファイルの処理を紹介します。まずはシンプルなテキストの先頭10行を出力するプログラムです。

Option Explicit
Dim fso, args
set fso = CreateObject("Scripting.FileSystemObject")
set args = WScript.Arguments
Const MAXLEN = 10
ReadFile args(0) 
WScript.Quit

sub ReadFile( filename )
  dim linecount, ofile, line
  linecount = 0
  if fso.FileExists( filename ) then
    set ofile = fso.OpenTextFile( filename, 1 )
    do while ofile.AtEndOfStream = false
      line = ofile.readline
      linecount = linecount + 1
      WScript.echo line
      if linecount > MAXLEN then
         exit do
      end if
    loop
    ofile.close
  else
    WScript.echo "Can't file " & filename
  end if
end sub

何も工夫のないシンプルなテンプレートですが、テキスト読み出しの基本となるテンプレートのため、構造や特性のわからないログを解析するときなどは、このテンプレートがスタートラインになります。
Sub ReadFile( filename )
引数にテキストファイルのファイル名を渡すとそのテキストファイルの先頭10行を出力するというものです。
if fso.FileExists( filename ) then
はファイルが存在するかどうかをチェックしています。
set ofile = fso.OpenTextFile( filename, 1 )
は、テキストファイルをオープンしています。なお、この開き方はテキストファイルがS-JISフォーマットを想定した開き方です。UTF16やUTF8の場合はこの方法では開けません。
その場合エラーにはなりませんが、何も表示されなかったり、文字化けしたりします。
do while ofile.AtEndOfStream = false
からLoopまでが、ファイルの最後まで繰り返せというループです。
line = ofile.readline
一行読み込んでlineという変数に保存せよという意味です。
if linecount > MAXLEN then
exit do
end if
は、行数がMAXLEN(10)行を超えたらループを終了しろという意味です。
ofile.close
はファイルを閉じろです。
今回はここまで、次回はいよいよCSVです。