郵便番号検索すると、住所表記が漢数字で出てくる。
人が自分の住所書く時は、そーゆー地名でもない限り大体は数字で書きますよね。
手書きOCRとかすると表記のブレが気になるかなーと思ったので、今回のテーマは漢数字を数字に変換ってことにした。
住所表記が目的なので、変換対象は二桁までです。
今回も、『スクリプト実行』ステージに張り付けるスクリプトで考えてみました。
はい、ドン。
' 漢数字の部分を全角の数字に変換する(1~99)
Dim RegEx, dicNum, JNum, Rslt, BefJ, ChrJ, AftN, ChrCode, WideN
JNum = !漢数字を含む文字列!
strValue = $漢数字を数値化した結果$
Rslt = JNum
' 漢数字の定義
Set dicNum = CreateObject("Scripting.Dictionary")
dicNum.Add "一", 1
dicNum.Add "二", 2
dicNum.Add "三", 3
dicNum.Add "四", 4
dicNum.Add "五", 5
dicNum.Add "六", 6
dicNum.Add "七", 7
dicNum.Add "八", 8
dicNum.Add "九", 9
' 漢数字部分を取り出し
Set RegEx = CreateObject("VBScript.RegExp")
With RegEx
.IgnoreCase = True
.Global = True
.Pattern = "[一二三四五六七八九十]+条"
End With
' 漢数字を数値化
For Each mtch In RegEx.Execute(JNum)
BefJ = mtch.Value
AftN = 0
For i = 1 To Len(BefJ)
ChrJ = Mid(BefJ, i, 1)
If ChrJ = "十" Then
If AftN = 0 Then
AftN = 10
Else
AftN = AftN * 10
End If
ElseIf dicNum.Exists(ChrJ) Then
AftN = AftN + dicNum(ChrJ)
End If
Next
Rslt = Replace(Rslt, BefJ, AftN)
Next
' 半角数字の全角化
WideN = ""
For j = 1 To Len(Rslt)
ChrJ = Mid(Rslt, j, 1)
ChrCode = Asc(ChrJ)
If (ChrCode >= &H30 And ChrCode <= &H39) Then
WideN = WideN & Chr(ChrCode - &H7DE1)
Else
WideN = WideN & ChrJ
End If
Next
Rslt = WideN
Call SetUMSVariable(strValue, Rslt)
最初、判定パターンに「条」付けなかったら問答無用で固有地名の漢数字まで変換しちゃったから「条」まで付けました。
住所表記が「〇条〇丁目」の条です。
純粋に漢数字の変換だけでよい人は、「条」の1文字を削って下さい。
九十九 ⇒ 99
十五 ⇒ 15
二十 ⇒ 20