WinActorのフリガナ転記で、こっちに入力するときはカタカナでいいんだけど、こっちではひらがなで入れたいんだよねー・・・みたいな声が天から聞こえた。
めんどくさかったけども、思い立ったので書いてみました。
1.ひらがな⇔カタカナの変換
カタカナしか受け付けない入力フォームなのに英数混じってること良くあるヤン!
っていう事故対策で英数が混じってた時に英数までフリガナ化するか、排除するかっていう処理も追加してます。
いつもの如く、スクリプト実行ステージのスクリプトタブに張り付ければすぐに使えるスクリプトです。
inMOJI = !元の文字!
ConvType = !変換処理|ひらがな⇒カタカナ,カタカナ⇒ひらがな!
OptnType = !英数処理|排除,読み替え!
outMOJI = $変換後の文字$
tmpMOJI = ""
' 定義
hiragana = Array("ぁ","あ","ぃ","い","ぅ","う","ぇ","え","ぉ","お","か","が","き","ぎ","く","ぐ","け","げ","こ","ご","さ","ざ","し","じ","す","ず","せ","ぜ","そ","ぞ","た","だ","ち","ぢ","っ","つ","づ","て","で","と","ど","な","に","ぬ","ね","の","は","ば","ぱ","ひ","び","ぴ","ふ","ぶ","ぷ","へ","べ","ぺ","ほ","ぼ","ぽ","ま","み","む","め","も","ゃ","や","ゅ","ゆ","ょ","よ","ら","り","る","れ","ろ","わ","ゎ","ゐ","ゑ","を","ん")
katakana = Array("ァ","ア","ィ","イ","ゥ","ウ","ェ","エ","ォ","オ","カ","ガ","キ","ギ","ク","グ","ケ","ゲ","コ","ゴ","サ","ザ","シ","ジ","ス","ズ","セ","ゼ","ソ","ゾ","タ","ダ","チ","ヂ","ッ","ツ","ヅ","テ","デ","ト","ド","ナ","ニ","ヌ","ネ","ノ","ハ","バ","パ","ヒ","ビ","ピ","フ","ブ","プ","ヘ","ベ","ペ","ホ","ボ","ポ","マ","ミ","ム","メ","モ","ャ","ヤ","ュ","ユ","ョ","ヨ","ラ","リ","ル","レ","ロ","ワ","ヮ","ヰ","ヱ","ヲ","ン")
hankata = Array("ァ","ア","ィ","イ","ゥ","ウ","ェ","エ","ォ","オ","カ","ガ","キ","ギ","ク","グ","ケ","ゲ","コ","ゴ","サ","ザ","シ","ジ","ス","ズ","セ","ゼ","ソ","ゾ","タ","ダ","チ","ヂ","ッ","ツ","ヅ","テ","デ","ト","ド","ナ","ニ","ヌ","ネ","ノ","ハ","バ","パ","ヒ","ビ","ピ","フ","ブ","プ","ヘ","ベ","ペ","ホ","ボ","ポ","マ","ミ","ム","メ","モ","ャ","ヤ","ュ","ユ","ョ","ヨ","ラ","リ","ル","レ","ロ","ワ","ワ","イ","エ","ヲ","ン")
zenomj = Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
zenkmj = Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
hanomj = Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
hankmj = Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
yomikt = Array("エー","ビー","シー","ディー","イー","エフ","ジー","エイチ","アイ","ジェイ","ケー","エル","エム","エヌ","オー","ピー","キュー","アール","エス","ティー","ユー","ブイ","ダブリュー","エックス","ワイ","ゼット")
romanum = Array("Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ","Ⅹ")
romayom = Array("ワン","ツー","スリー","フォー","ファイブ","シックス","セブン","エイト","ナイン","テン")
zennum = Array("0","1","2","3","4","5","6","7","8","9")
hannum = Array("0","1","2","3","4","5","6","7","8","9")
yominm = Array("ゼロ","イチ","ニ","サン","ヨン","ゴ","ロク","ナナ","ハチ","キュウ")
tanptn = Array("\d{9}","\d{8}","\d{7}","\d{6}","\d{5}","\d{4}","\d{3}","\d{2}", "\d{1}")
taninm = Array("オク","センマン","ヒャクマン","ジュウマン","マン","セン","ヒャク","ジュウ", "")
' 半角カナは全角カナにしておく
tmpMOJI = ConvAryStr(inMOJI, hankata, katakana)
' アルファベットは全角大文字でまとめとく
tmpMOJI = ConvAryStr(tmpMOJI, zenkmj, zenomj)
tmpMOJI = ConvAryStr(tmpMOJI, hankmj, zenomj)
tmpMOJI = ConvAryStr(tmpMOJI, hanomj, zenomj)
tmpMOJI = ConvAryStr(tmpMOJI, hankmj, zenomj)
' 数字は半角にしておく
tmpMOJI = ConvAryStr(tmpMOJI, zennum, hannum)
' 英数が混じっていた場合の対処
Select Case OptnType
Case "排除"
tmpMOJI = DeleteAryStr(tmpMOJI, yomikt)
tmpMOJI = DeleteAryStr(tmpMOJI, hannum)
tmpMOJI = DeleteAryStr(tmpMOJI, romanum)
Case "読み替え"
tmpMOJI = ConvAryStr(tmpMOJI, zenomj, yomikt)
tmpMOJI = ConvAryStr(tmpMOJI, romanum, romayom)
tmpMOJI = NumRead(tmpMOJI)
End Select
Select Case ConvType
Case "ひらがな⇒カタカナ"
tmpMOJI = ConvAryStr(tmpMOJI, hiragana, katakana)
Case "カタカナ⇒ひらがな"
tmpMOJI = ConvAryStr(tmpMOJI, katakana, hiragana)
End Select
Call SetUMSVariable(outMOJI, tmpMOJI)
' 以下、関数定義
Function ConvAryStr(SrcStr, BefAry, AftAry)
Dim CnvStr
CnvStr = SrcStr
For i=0 To UBound(BefAry)
CnvStr = Replace(CnvStr, BefAry(i), AftAry(i))
Next
ConvAryStr = CnvStr
End Function
Function DeleteAryStr(SrcStr, DelAry)
Dim CnvStr
CnvStr = SrcStr
For i=0 To UBound(DelAry)
CnvStr = Replace(CnvStr, DelAry(i), "")
Next
DeleteAryStr = CnvStr
End Function
Function NumRead(SrcStr)
Dim CnvStr
CnvStr = SrcStr
Set reg = CreateObject("VBScript.RegExp")
reg.Global = True
' 桁ごと判定
For i=0 To UBound(tanptn)
reg.Pattern = tanptn(i)
Set mtchs = reg.Execute(CnvStr)
For Each mtch In mtchs
init = Left(mtch.Value, 1)
initkn = ConvAryStr(init, hannum, yominm)
cntin = Mid(mtch.Value, 2)
If init = "0" Then
CnvStr = Replace(CnvStr, mtch.Value, initkn & cntin)
Else
If init = "1" Then initkn = ""
Do While Left(cntin, 1) = "0"
cntin = Mid(cntin, 2)
Loop
CnvStr = Replace(CnvStr, mtch.Value, initkn & taninm(i) & cntin)
End If
Next
Next
NumRead = CnvStr
Set reg = Nothing
End Function
2.設定タブは、こんな感じ。
- 変換処理 : 「カタカナ⇒ひらがな」、「ひらがな⇒カタカナ」
- 英数処理 : 「排除」、「読み替え」
なんとなくスクリプト書く手が暴走して、数字の桁を「ひゃく」とかちゃんと読めるロジック付けちゃったりして・・・。
例えば・・・、
元の文字「セイレキ2019」
変換後の文字「せいれきにせんじゅうきゅう」
みたいな。
使わねーわ、何やってんだろ。
