VBScriptのデバッグ出力関数「dprintf」を使うためのソース一式

どーもボキです。

dprintfは、cscriptホスト(コンソールホスト)のときのみ、デバッグ出力を行う関数

変更点
  • クラス名をTDebugへ変更し、デバッグ出力関数をPrintへ変更した。これにより、Debug.Printでもデバッグ出力できるようにした。
  • cscript(cscriptホストを指定する関数)を作成し、そこでTDebugクラスを生成するようにした。

変更した理由
  • VBAになれた人はDebug.Printと書けるので、扱いやすくなったかと。なお、VBAのDebug.Printとは少し動作が異なります(※VBAで利用できる「,」でTAB記号、「;」で同じ行へ出力、といったことはできない)。
  • VBScriptのデフォルトホストはWScriptのため、ホスト切り替えは先は基本的にcscriptとなる。そのため、SetScriptHost "cscript"をラッパーした関数を用意し、そこでTDebugクラスを生成されるようにした。この変更により、下図のようなdprintf(Debug.Print)実行前のエラーも表示できるようになった。
VBScriptのデバッグ出力関数「dprintf」を使うためのソース一式_a0021757_07535683.png



今回開発したプログラムソース

'----------------------------------------------------------------------------
' 実行ホストを切り替える
'----------------------------------------------------------------------------
Sub cscript
SetScriptHost "cscript"
Set Debug = New TDebug
End Sub

Sub SetScriptHost(HostName)
If InStr(LCase(WSCript.FullName), LCase(HostName)) <> 0 Then Exit Sub
Dim i,s
s = HostName & " //nologo """ & WScript.ScriptFullName & """"
If WScript.Arguments.Count > 0 Then
For i = 0 To WScript.Arguments.Count -1
s = s &" """ & WScript.Arguments.Item(i) & """" ' 引数
Next
End If
CreateObject("WScript.Shell").Run s
WScript.Quit
End Sub
'----------------------------------------------------------------------------
' TDebugクラス
'----------------------------------------------------------------------------
Private Debug
' クラス
Class TDebug
Dim FEnabled
' 初期化処理
Private Sub Class_Initialize()
FEnabled = InStr(LCase(WSCript.FullName), "cscript") > 0
If FEnabled Then WScript.Echo Now & vbTab & WScript.ScriptFullName
End Sub
' 終了処理
Private Sub Class_Terminate()
If Not FEnabled Then Exit Sub
WScript.Echo Now & vbTab &" [END]"
WScript.StdIn.ReadLine
End Sub
' CScriptホストかどうか
Public Property Get Enabled
Enabled = FEnabled
End Property
Public Property Let Enabled(Value)
If FEnabled Then FEnabled = Value
End Property
' デバッグメッセージ処理
Public Sub Print(iStr)
If Not FEnabled Then Exit Sub
Dim stime
stime = Mid(Now,InStr(Now," ")+1,Len(Now))
WScript.Echo stime & vbTab & iStr
End Sub
End Class
'----------------------------------------------------------------------------
' dprintf(クラスを呼び出す)
'----------------------------------------------------------------------------
Sub dprintf(iStr)
If VarType(Debug) = vbEmpty Then
Set Debug = New TDebug
End If
Debug.Print(iStr)
End Sub
'----------------------------------------------------------------------------
' dprintf実行を終了する(スクリプト終了時にコンソールを残さない)
'----------------------------------------------------------------------------
Sub dprintf_end
If VarType(Debug) = vbObject Then
Debug.Enabled = False
End If
End Sub



この記事での気付き・取ってほしい行動

共通宣言や関数をインクルード実行する場合は、そのファイルのどこかに「Set Debug = New TDebug」を書いておけばⓄⓀ。TDebugクラスが生成されるので。
インクルード実行とは、コチラ





にほんブログ村 IT技術ブログへ
にほんブログ村

名前
URL
削除用パスワード

※このブログはコメント承認制を適用しています。ブログの持ち主が承認するまでコメントは表示されません。

by yozda | 2025-06-09 07:59 | ボキ、しごとのヒント集める | Comments(0)

ボキの興味、書き散らかします


by ボキ
カレンダー
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28