LoginSignup
1
1

VBSで自動化を目指す - 初級編

はじめに

まずはじめに、自動化には色々ある。
Pythonが慣れているので、Pythonで書きたいのだが、
閉鎖空間の中ではメンテナンス含め、大変だと思ったので、
動作可能なVBScriptで書くことにする。
※今後、廃止予定の言語だということなので、とりあえずしのぎ程度に作ろうかと思います。

初級

本言語になれるため、まずは、いろいろと試したいことをまとめて書き出す。
VBScriptの特徴として、TypeScriptっぽい感じだった。
また、日本語を扱うのが苦手みたいで、直接日本語で書くと基本的には文字化けします。
作法としては、日本語を取り扱う場合は、Shift_JISで保存します。

拡張子は、「.vbs」となります。

GoToステートメントは用意されていませんが、エラー値判定とエラーハンドラへのGoToのみがエラー処理として存在しており、他の言語に比べるとエラー処理を追加するだけなのに、結構癖が強いです。

まずは、短期習得を目指すので、必要な箇所にターゲットを絞り、学習します。
要件定義を出してみようと思います。

最低限必要な機能として、「ファイル出力」、「キーハンドラ」、「画像によるエビデンス」、「初期設定ファイルの読み込み」、「判定機能」、「いろいろな用途への柔軟性」...など、出せばいくらでも出せそうなので、
ひとまず動くものを作成します。

システムのメインとなる箇所は、「ファイルの読み込み、書き込み、出力」です。
操作結果や対応処理後のファイル出力等は、必須の項目なので、最初それらにターゲットを絞り、作成していきます。

はじめに、ファイルの読み込み部分です。
コンフィグファイルは、次の通りです。

config.ini
[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

ファイル読み込みの部分は次の通りです。

Init_test.vbs
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を利用して、メモリを開放しましょう。
メインとなる「ファイルの読み込み、書き込み、出力」を達成しましたので、
今回はこの辺で終わります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1