【VBScript】固定長ファイル:一部データをマスクするツール

■固定長ファイルとは

1行の長さが一定であるファイルを固定長ファイルという。

一般的に桁数や行数でデータ項目を判断し、それぞれ区分けしたデータをインプットとして読み込む。

■固定長ファイルのイメージ

固定長ファイルの例を示す。

▼sample_data.txt

1202001051                              
2202001041234567890000000324112345678901
2202001031234567881000000020012345678902
2202001011234567870000006544112345678903
9000000003                              

▼固定長ファイルのレイアウト

一般的に固定長ファイルを扱う場合は、固定長ファイルに対応するファイルレイアウトが存在する。

上記「 sample_data.txt」のファイルレイアウトは以下の通り

▼ヘッダー行のレイアウト

項目桁数概要
レコード区分1値が「1」の場合はヘッダーレコード
日付8YYYYMMDD形式
曜日11:日曜日
2:月曜日
3:火曜日
4:水曜日
5:木曜日
6:金曜日
7:土曜日
ブランク30半角スペース

▼データ行のレイアウト

項目桁数概要
レコード区分1値が「2」の場合はデータレコード
利用日8YYYYMMDD形式(データを作成した日)
会員番号9利用者の会員番号
利用金額フラグ1「0」ならプラス。「1」ならマイナス
利用金額10利用金額(未使用部分は0埋め)
電話番号11利用者の電話番号(ハイフンなし)

▼フッター行のレイアウト

項目桁数概要
レコード区分1 値が「9」の場合はフッターレコード
データ件数9データレコードの件数
ブランク30半角スペース

■マスクツールの仕様

データ行の「会員番号」を「AAAAAAAAA」、「電話番号」を「BBBBBBBBBBB」に変換する。

また、フォルダ構成は以下の通りとする。

固定長ファイルマスクフォルダ
│ file_msk.vbs

├─00_マスク前
│ sample_data.txt

└─01_マスク後
sample_data.txt

「00_マスク前」フォルダにマスク前のファイルを格納し、「 file_msk.vbs 」を実行すると「 01_マスク後 」フォルダにマスク後のファイルを格納する。

▼サンプルコード


' 定数
const MskUserNo = "AAAAAAAAA"		' 会員番号をAにマスクする定数
const MskTelNo = "BBBBBBBBBBB"		' 電話番号をBにマスクする定数

' 変数
Dim fso				'ファイルオブジェクトを格納する変数
Dim input_file		' 読み込むファイルを格納する変数
Dim output_file		' 出力ファイルを格納変数


' ファイルオブジェクトをセット
set fso = WScript.CreateObject("Scripting.FileSystemObject")

' 入出力ファイルの設定
Set input_file = fso.OpenTextFile(".\00_マスク前\sample_data.txt", 1, False, 0)
Set output_file = fso.OpenTextFile(".\01_マスク後\sample_data.txt", 2, True)

' 読み込みファイルから1行ずつ読み込み、出力ファイルに最終行まで出力する
Do Until input_file.AtEndOfStream
	Dim lineStr		' 1行ずつ読み込んだ文字列を格納する変数

	' 1行ずつ読み込んだ文字列を格納
	lineStr = input_file.ReadLine

	' 1桁目がデータレコード(2)であれば、マスク対象
	if mid(lineStr,1,1) = "2" then
		' 会員番号と電話番号をマスクする
		lineStr = mid(lineStr, 1, 9) + MskUserNo + mid(lineStr, 19, 11) + MskTelNo
	end if

	' 出力ファイルへ文字列を出力する
	output_file.WriteLine lineStr
Loop

MsgBox "完了"

' 入出力ファイルを閉じる
input_file.Close
output_file.Close

' ファイルオブジェクトを閉じる
set fso = nothing

▼実行結果

▼ sample_data.txt (マスク後)

1202001051                              
220200104AAAAAAAAA00000003241BBBBBBBBBBB
220200103AAAAAAAAA10000000200BBBBBBBBBBB
220200101AAAAAAAAA00000065441BBBBBBBBBBB
9000000003                              

▼比較結果

タイトルとURLをコピーしました