NDW

アプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング bat_vbs windows 実装技術

テキストファイルマスクツール

投稿日:2018年11月25日 更新日:


本番環境での性能検証でNGになってしまった。
どの処理でどれほどの処理時間がかかっているかを把握するためにログレベルを変更して、ログを取得した。
対応方法を自社の担当者と検討するために、本番環境からこのログを持ち帰りたいが、本番メールアドレスがログに記録されている。
数千件のメールアドレスを手動でマスクするのは現実的ではないので、ツールを作ることにした。
(どちらかというと、ツールというよりはサンプルです。)

ツールを実行するためのバッチファイルです。
WScript.Echoを使っているので、ダブルクリックで実行すると大量のメッセージボックスが表示されてしまう。
これを回避するためラッパーであり、実際の処理は次のvbsファイルです。

@echo off
rem 
rem mask_text.bat: テキストファイルの内容をマスクする
rem 
cscript.exe /nologo mask_text.vbs
pause

入力ファイルをオープンし、読取行のメールアドレスを置換して出力ファイルに出力します。
何らかの変更があった場合は、変更前/後を標準出力に出力します。

'
' mask_text.vbs: テキストファイルの内容をマスクする
'
' 実行方法: cscript.exe /nologo mask_text.vbs
'
Option Explicit

'入出力ファイル ==========
'マスク対象のファイルを定義してください。
Const INPUT_FILE="test.txt"
'マスクした内容を出力するファイルを定義してください。
Const OUTPUT_FILE="test_masked.txt"

'処理用定数 ==========
Const ForReading = 1

'マスク用の正規表現の定義 ==========
'メールアドレス的なワード(一般的なメールアドレスチェック用のものではない)
Dim oReMailAddr
Set oReMailAddr = CreateRegExp( _
    "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+[A-Z]{2,4}\b", True, True)
'必要であれば以降に追加(下記は追加例)
'Dim oReTest
'Set oReTest = CreateRegExp("regexp", True, True)

WScript.echo "start"

'入力ファイルの内容を置換して出力 ==========
Dim oFSO, oInStream, oOutStream
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oInStream = oFSO.OpenTextFile(INPUT_FILE, ForReading)
Set oOutStream = oFSO.CreateTextFile(OUTPUT_FILE, True)
Dim sLine, sRepLine
Do Until oInStream.AtEndOfStream

    '行読取
    sLine = oInStream.ReadLine

    '置換
    sRepLine = oReMailAddr.Replace(sLine, "***@***")
    'sRepLine = oReTest.Replace(sLine, "***")

    'デバッグ
    If sLine <> sRepLine Then
        WScript.Echo "< " & sLine
        WScript.Echo "> " & sRepLine
        WScript.Echo "---"
    End If

    '出力
    oOutStream.WriteLine sRepLine
Loop
oInStream.Close
oOutStream.Close

WScript.echo "end"

'マスク用の正規表現オブジェクトを生成する。
Function CreateRegExp(sExp, bGlobal, bIgnoreCase)
    Set CreateRegExp = CreateObject("VBScript.RegExp")
    With CreateRegExp
        .Pattern = sExp
        .Global = bGlobal
        .IgnoreCase = bIgnoreCase
    End With
End Function

ダウンロードは下記から。







-1. システムエンジニアリング, bat_vbs, windows, 実装技術


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

C#: Graph API ユーザアカウント操作サンプル

概要 管理者がAzure AD B2Cのユーザアカウントの管理が行えるASP.NET Coreのアプリの開発を想定している。Azure AD B2Cユーザアカウントの作成や更新等の操作はMicroso …

TeraTermを使ったSSH鍵の作成方法

WindowsでSSH接続するためのTera Termで、SSH鍵を作成する方法を説明します。 概要 Windows10(64ビット)で動作するTera Term 4.105で動作確認しました。 クラ …

JSFラジオボタン・チェックボックスとbootstrap

boostrapでラジオボタンやチェックボックスを使用する場合、div, input, label要素にbootstrapのCSSクラスを指定する必要がある。 JSFでラジオボタンを使用する場合、se …

ASP.NET Core: エラーメッセージの日本語化

ASP.NET Coreでは入力値を検証するための[Required]等の検証属性が提供されていますが、エラーメッセージが英語になっています。 検証属性以外でも画面の実装方法によってはモデルバインディ …

.NET Core(C#): Moqのnew Mock<T>()とMock.Of<T>()の違い

はじめに 次の環境を使用して動作確認しています。 OS Windows 10(64ビット) IDE Microsoft Visual Studio Community 2019(16.8.5) + C …