忍者ブログ

VBScriptのデバッグログを出力するモジュールを作成

2024年06月08日
VBScriptはメモ帳にソースコードを書いて
Windowos上で動作させることができるのでめっちゃ手軽。

しかし、Windowos上で動作するので変なコードを仕込んでしまうと
なかなか止めることができず、タスクマネージャーから強制終了させるか
下手するとWindowosの再起動が必要になる場合がある。

テキストエディタだと、デバッグがやりづらい。

変数の状態を見るには、msgboxなんかをよく使うものの、
for ループの中に入れてしまうと、永遠とMSGBOXが出てめんどくさい。

そんなわけで、今回は手軽に変数の状態を見れるように
デバッグログを出力するモジュールを作ってみた。


以下の記事で似たようなことを書いてるけど、
用途と使い勝手が違うので、改めて書くことにした。

VBScriptで進捗状況を表示する方法~プログレスファイル出力~
テキストファイルを使ったプログレス表示スクリプトを改良

2024/06/08 追記
よく探してみたら全く同じ内容を投稿してた。。。作成済みソースの活用って難しいね。
デバッグログを出力するvbscript

開発用テンプレートを作って、よく使う処理は呼び出すだけにするべきだよな。
テキストをファイルに出力する処理とか、ドラッグドロップとか
今度リストアップしてみよう。



ベースは、コパイロットに依頼。出てきたコードは以下の通り。
' デバッグログを出力する関数
Sub WriteDebuglog(text)
    ' ログファイルのパス
Dim logFilePath
logFilePath = "debug.log"
    ' ファイルシステムオブジェクトの作成
    Dim fso, logFile
    Set fso = CreateObject("Scripting.FileSystemObject")
 
    ' ログファイルが存在するかチェックし、存在しなければ作成
    If Not fso.FileExists(logFilePath) Then
        Set logFile = fso.CreateTextFile(logFilePath)
    Else
        Set logFile = fso.OpenTextFile(logFilePath, 8) ' 8 = ForAppending
    End If
    ' テキストをログファイルに書き込む
    logFile.WriteLine Now & " | " & text
    logFile.Close
 
    ' オブジェクトの解放
    Set logFile = Nothing
    Set fso = Nothing
End Sub


ぶっちゃけ、ほぼほぼこれで事足りるけど、ちょっとカスタマイズ。
VBScriptのコーディングするうえでは、1行ずつ現在時刻は要らないので、
ログの1行目にタイトルを入れることにした。

モジュールの外にdebugCnt を用意して、2回目以降の実行時にはタイトルを出力しない仕様に。

実行結果の比較することを想定して、出力するファイルに日時を入れて別名とするか
フォルダ内が散らからないように、常に同じファイル名をdateFlagで設定できるようにした。

また、コーディング中にサッとログを見れるようにモジュール名を「debuglog」に変更。何気に重要。
そんな感じで以下ソース。

' デバッグログを出力する関数(改良)
const dateFlag = 0 : dim debugCnt
Sub debuglog(text)
    ' ログファイルのパス
dim strNow : strNow = left(replace(replace(replace(now,"/",""),":","")," ","_"),15)
Dim logFilePath
if dateFlag = 0 then
logFilePath = "debug.log"
else
logFilePath = "debug" & strNow & ".log"
end if
    ' ファイルシステムオブジェクトの作成
    Dim fso, logFile
    Set fso = CreateObject("Scripting.FileSystemObject")
 
    ' ログファイルが存在するかチェックし、存在しなければ作成
    If Not fso.FileExists(logFilePath) Then
        Set logFile = fso.CreateTextFile(logFilePath)
    Else
        Set logFile = fso.OpenTextFile(logFilePath, 8) ' 8 = ForAppending
    End If
 
    ' テキストをログファイルに書き込む
if debugCnt = 0 then 
    logFile.WriteLine chr(10) & chr(10) & "-------- | " &  Now & " | デバッグログ | --------" 
debugCnt = 1
end if
    logFile.WriteLine text
    logFile.Close
 
    ' オブジェクトの解放
    Set logFile = Nothing
    Set fso = Nothing
End Sub
PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字