わんすけに聞いてみる WinActor [WinActor]漢数字を全角の数字に変換(二桁)

[WinActor]漢数字を全角の数字に変換(二桁)

郵便番号検索すると、住所表記が漢数字で出てくる。

人が自分の住所書く時は、そーゆー地名でもない限り大体は数字で書きますよね。

手書き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

コメントを残す

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

Related Post