VBSで自動化を目指す - 初級編
はじめに
まずはじめに、自動化には色々ある。
Pythonが慣れているので、Pythonで書きたいのだが、
閉鎖空間の中ではメンテナンス含め、大変だと思ったので、
動作可能なVBScriptで書くことにする。
※今後、廃止予定の言語だということなので、とりあえずしのぎ程度に作ろうかと思います。
初級
本言語になれるため、まずは、いろいろと試したいことをまとめて書き出す。
VBScriptの特徴として、TypeScriptっぽい感じだった。
また、日本語を扱うのが苦手みたいで、直接日本語で書くと基本的には文字化けします。
作法としては、日本語を取り扱う場合は、Shift_JISで保存します。
拡張子は、「.vbs」となります。
GoToステートメントは用意されていませんが、エラー値判定とエラーハンドラへのGoToのみがエラー処理として存在しており、他の言語に比べるとエラー処理を追加するだけなのに、結構癖が強いです。
まずは、短期習得を目指すので、必要な箇所にターゲットを絞り、学習します。
要件定義を出してみようと思います。
最低限必要な機能として、「ファイル出力」、「キーハンドラ」、「画像によるエビデンス」、「初期設定ファイルの読み込み」、「判定機能」、「いろいろな用途への柔軟性」...など、出せばいくらでも出せそうなので、
ひとまず動くものを作成します。
システムのメインとなる箇所は、「ファイルの読み込み、書き込み、出力」です。
操作結果や対応処理後のファイル出力等は、必須の項目なので、最初それらにターゲットを絞り、作成していきます。
はじめに、ファイルの読み込み部分です。
コンフィグファイルは、次の通りです。
[init]
Version=1.0.0
DebugMode=True
[General]
Language=English
Theme=Light
[User]
Name=John Doe
Email=john-doe@example.com
[Network]
IPAddress=192.168.1.100
Port=8080
[Preferences]
Notifications=Enabled
FontSize=12
ファイル読み込みの部分は次の通りです。
Option Explicit
' ============================
' Init Test
' ============================
' TestCodes.
' ============================
' ============================
Dim config, pattern, regEx, matches
Set config = CreateObject("Scripting.Dictionary")
Set regEx = New RegExp
' INIファイルから値を読み取る関数
Function ReadIniFile(strFilePath)
Dim objFSO, objTextFile, strLine, strCurrentSection, arrKeyValue, SplitKeyValue
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(strFilePath, 1)
Do Until objTextFile.AtEndOfStream
strLine = Trim(objTextFile.ReadLine)
' セクションの開始を検出
If Left(strLine, 1) = "[" And Right(strLine, 1) = "]" Then
pattern = "^\[(.*?)\]$"
With regEx
.Pattern = pattern 'パターンを設定します
.IgnoreCase = True '大文字と小文字を区別するか(False)、しないか(True)
.Global = False '文字列全体を検索するか(True)、しないか(False)
End With
Set matches = regEx.Execute(strLine)
strCurrentSection = matches(0).SubMatches(0)
Set config(strCurrentSection) = CreateObject("Scripting.Dictionary")
End If
' セクションごとに、keyとValueを格納する
If InStr(strLine, "=") > 0 Then
pattern = "[=]"
With regEx
.Pattern = pattern 'パターンを設定します
.IgnoreCase = True '大文字と小文字を区別するか(False)、しないか(True)
.Global = False '文字列全体を検索するか(True)、しないか(False)
End With
' キーと値を分割
arrKeyValue = Split(regEx.Replace(strLine, ","), "," ,2)
config(strCurrentSection).Add Trim(arrKeyValue(0)), Trim(arrKeyValue(1))
End If
Loop
' 見つからない場合は空文字を返す
ReadIniFile = ""
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
End Function
Private Sub Init()
' 初期化実行
ReadIniFile "E:\tmp\config.ini"
' 初期化完了後のConfigを確認するだけのコード
Dim strSection, strKey, strValue
For Each strSection In config
WScript.Echo "Section: " & strSection
For Each strKey In config(strSection)
strValue = config(strSection)(strKey)
WScript.Echo "Key: " & strKey & " Value: " & strValue
Next
Next
End Sub
Call Init
一通り、動く形になりました。
今回の目標は、言語の基礎的な部分を「必要最低限」習得しました。
ファイル操作、変数への格納(配列含め)、For文(Do~Loop含む)やIf文、
合わせて「正規表現」等を習得しました。
また、不要になったオブジェクトはNothing
を利用して、メモリを開放しましょう。
メインとなる「ファイルの読み込み、書き込み、出力」を達成しましたので、
今回はこの辺で終わります。