わんすけに聞いてみる WinActor [WinActor]全角・半角の変換

[WinActor]全角・半角の変換

ライブラリ眺めてたら、大文字化・小文字化はあったんだけども全角⇔半角変換が見当たらなかった。

※※※ 追記・訂正 ※※※
ノードの方に『全角化/半角化』ありました。

 

ググったら、素晴らしいスクリプトを公開している記事を見つけたので、WinActorで早速使えるようにしてみました。

 

オプションで、以下の変換を選んで実行できる様にしてあります。

  • 全角⇒半角(英数記号カタカナ)
  • 全角⇒半角(英数記号のみ)
  • 全角⇒半角(カタカナのみ)
  • 半角⇒全角(英数記号カタカナ)
  • 半角⇒全角(英数記号のみ)
  • 半角⇒全角(カタカナのみ)

スクリプト実行のスクリプトタブに以下のスクリプトを張り付けて下さい。

Dim objCWN, SrcStr, ConvType, RsltVal, Rslt

SrcStr = !変換前の文字列!
ConvType = !変換内容|全⇒半(ALL),全⇒半(英数記),全⇒半(カナ),半⇒全(ALL),半⇒全(英数記),半⇒全(カナ)!
RsltVal = $変換した結果$

Set objCWN = New CharWideNarrow

Select Case ConvType
  Case "全⇒半(ALL)"
    Rslt = objCWN.ToNarrowAll(SrcStr)
  Case "全⇒半(英数記)"
    Rslt = objCWN.ToNarrowASCII(SrcStr)
  Case "全⇒半(カナ)"
    Rslt = objCWN.ToNarrowKANA(SrcStr)
  Case "半⇒全(ALL)"
    Rslt = objCWN.ToWideAll(SrcStr,False)
  Case "半⇒全(英数記)"
    Rslt = objCWN.ToWideASCII(SrcStr)
  Case "半⇒全(カナ)"
    Rslt = objCWN.ToWideKANA(SrcStr,True)
End Select

Call SetUMSVariable(RsltVal , Rslt)
Set objCWN = Nothing

Class CharWideNarrow
	Dim  widedicASCII, widedicANK, narrowdicASCII, narrowdicANK
	Dim x
	Private Sub Class_Initialize()
		'コンストラクタ
		Set widedicASCII   = CreateObject("Scripting.Dictionary")
		Set widedicANK     = CreateObject("Scripting.Dictionary")
		Set narrowdicASCII = CreateObject("Scripting.Dictionary")
		Set narrowdicANK   = CreateObject("Scripting.Dictionary")

		With narrowdicANK
			'表の作成
			.Add "゜", "゚"
			.Add "゛", "゙"
			.Add "ヴ", "ヴ"
			.Add "ン", "ン"
			.Add "ヲ", "ヲ"
			.Add "ヱ", "ウェ"
			.Add "ヰ", "ウィ"
			.Add "ワ", "ワ"
			.Add "ヮ", "ワ"
			.Add "ロ", "ロ"
			.Add "レ", "レ"
			.Add "ル", "ル"
			.Add "リ", "リ"
			.Add "ラ", "ラ"
			.Add "ヨ", "ヨ"
			.Add "ョ", "ョ"
			.Add "ユ", "ユ"
			.Add "ュ", "ュ"
			.Add "ヤ", "ヤ"
			.Add "ャ", "ャ"
			.Add "モ", "モ"
			.Add "メ", "メ"
			.Add "ム", "ム"
			.Add "ミ", "ミ"
			.Add "マ", "マ"
			.Add "ポ", "ポ"
			.Add "ボ", "ボ"
			.Add "ホ", "ホ"
			.Add "ペ", "ペ"
			.Add "ベ", "ベ"
			.Add "ヘ", "ヘ"
			.Add "プ", "プ"
			.Add "ブ", "ブ"
			.Add "フ", "フ"
			.Add "ピ", "ピ"
			.Add "ビ", "ビ"
			.Add "ヒ", "ヒ"
			.Add "パ", "パ"
			.Add "バ", "バ"
			.Add "ハ", "ハ"
			.Add "ノ", "ノ"
			.Add "ネ", "ネ"
			.Add "ヌ", "ヌ"
			.Add "ニ", "ニ"
			.Add "ナ", "ナ"
			.Add "ド", "ド"
			.Add "ト", "ト"
			.Add "デ", "デ"
			.Add "テ", "テ"
			.Add "ヅ", "ヅ"
			.Add "ツ", "ツ"
			.Add "ッ", "ッ"
			.Add "ヂ", "ヂ"
			.Add "チ", "チ"
			.Add "ダ", "ダ"
			.Add "タ", "タ"
			.Add "ゾ", "ゾ"
			.Add "ソ", "ソ"
			.Add "ゼ", "ゼ"
			.Add "セ", "セ"
			.Add "ズ", "ズ"
			.Add "ス", "ス"
			.Add "ジ", "ジ"
			.Add "シ", "シ"
			.Add "ザ", "ザ"
			.Add "サ", "サ"
			.Add "ゴ", "ゴ"
			.Add "コ", "コ"
			.Add "ゲ", "ゲ"
			.Add "ケ", "ケ"
			.Add "グ", "グ"
			.Add "ク", "ク"
			.Add "ギ", "ギ"
			.Add "キ", "キ"
			.Add "ガ", "ガ"
			.Add "カ", "カ"
			.Add "オ", "オ"
			.Add "ォ", "ォ"
			.Add "エ", "エ"
			.Add "ェ", "ェ"
			.Add "ウ", "ウ"
			.Add "ゥ", "ゥ"
			.Add "イ", "イ"
			.Add "ィ", "ィ"
			.Add "ア", "ア"
			.Add "ァ", "ァ"
			.Add "ー", "ー"
			.Add "・", "・"
			.Add "、", "、"
			.Add "」", "」"
			.Add "「", "「"
			.Add "。", "。"

			'逆引き表の作成
			For Each x In .Keys
				If widedicANK.Exists( .Item(x) ) = False Then
					widedicANK.Add .Item(x), x
				End If
			Next
		End With

		With narrowdicASCII
			'表の作成
			.Add "~", "~"
			.Add "}", "}"
			.Add "|", "|"
			.Add "{", "{"
			.Add "z", "z"
			.Add "y", "y"
			.Add "x", "x"
			.Add "w", "w"
			.Add "v", "v"
			.Add "u", "u"
			.Add "t", "t"
			.Add "s", "s"
			.Add "r", "r"
			.Add "q", "q"
			.Add "p", "p"
			.Add "o", "o"
			.Add "n", "n"
			.Add "m", "m"
			.Add "l", "l"
			.Add "k", "k"
			.Add "j", "j"
			.Add "i", "i"
			.Add "h", "h"
			.Add "g", "g"
			.Add "f", "f"
			.Add "e", "e"
			.Add "d", "d"
			.Add "c", "c"
			.Add "b", "b"
			.Add "a", "a"
			.Add "‘", "`"
			.Add "_", "_"
			.Add "^", "^"
			.Add "]", "]"
			.Add "¥", "\"
			.Add "[", "["
			.Add "Z", "Z"
			.Add "Y", "Y"
			.Add "X", "X"
			.Add "W", "W"
			.Add "V", "V"
			.Add "U", "U"
			.Add "T", "T"
			.Add "S", "S"
			.Add "R", "R"
			.Add "Q", "Q"
			.Add "P", "P"
			.Add "O", "O"
			.Add "N", "N"
			.Add "M", "M"
			.Add "L", "L"
			.Add "K", "K"
			.Add "J", "J"
			.Add "I", "I"
			.Add "H", "H"
			.Add "G", "G"
			.Add "F", "F"
			.Add "E", "E"
			.Add "D", "D"
			.Add "C", "C"
			.Add "B", "B"
			.Add "A", "A"
			.Add "@", "@"
			.Add "?", "?"
			.Add ">", ">"
			.Add "=", "="
			.Add "<", "<"
			.Add ";", ";"
			.Add ":", ":"
			.Add "9", "9"
			.Add "8", "8"
			.Add "7", "7"
			.Add "6", "6"
			.Add "5", "5"
			.Add "4", "4"
			.Add "3", "3"
			.Add "2", "2"
			.Add "1", "1"
			.Add "0", "0"
			.Add "/", "/"
			.Add ".", "."
			.Add "-", "-"
			.Add ",", ","
			.Add "+", "+"
			.Add "*", "*"
			.Add ")", ")"
			.Add "(", "("
			.Add "’", "'"
			.Add "&", "&"
			.Add "%", "%"
			.Add "$", "$"
			.Add "#", "#"
			.Add "”", """"
			.Add "!", "!"
			.Add " ", " "

			'逆引き表の作成
			For Each x In .Keys
				 widedicASCII.Add .Item(x), x
			Next
		End With
	End Sub

	Private Sub Class_Terminated()
		'デストラクタ
		Set widedicASCII   = Nothing
		Set widedicANK     = Nothing
		Set narrowdicASCII = Nothing
		Set narrowdicANK   = Nothing
	End Sub

	Function ToNarrowAll( byref str )
		Dim rtn, max_, char_, trns_
		rtn = ""
		max_ = len( str )
		For i = 1 to max_
			char_ = Mid( str,i,1 )
			If narrowdicASCII.Exists( char_ ) Then
				trns_ = narrowdicASCII.Item( char_ )
			Else
				If narrowdicANK.Exists( char_ ) Then
					trns_ = narrowdicANK.Item( char_ )
				Else
					trns_ = char_
				End If
			End If
			rtn = rtn & trns_
		Next 
		ToNarrowAll = rtn
	End Function

	Function ToNarrowASCII( byref str )
		Dim rtn, max_, char_, trns_
		rtn = ""
		max_ = len( str )
		For i = 1 to max_
			char_ = Mid( str,i,1 )
			If narrowdicASCII.Exists( char_ ) Then
				trns_ = narrowdicASCII.Item( char_ )
			Else
				trns_ = char_
			End If
			rtn = rtn & trns_
		Next 
		ToNarrowASCII = rtn
	End Function

	Function ToNarrowKANA( byref str )
		Dim rtn, max_, char_, trns_
		rtn = ""
		max_ = len( str )
		For i = 1 to max_
			char_ = Mid( str,i,1 )
			If narrowdicANK.Exists( char_ ) Then
				trns_ = narrowdicANK.Item( char_ )
			Else
				trns_ = char_
			End If
			rtn = rtn & trns_
		Next 
		ToNarrowKANA = rtn
	End Function

	Function ToWideAll( byref str , byval option_ )
		Dim rtn, max_, char_, trns_, next_c, flg_nextc_trns
		rtn = ""
		max_ = len( str ) - 1
		flg_nextc_trns = False
		For i = 1 to max_
			If flg_nextc_trns = True Then
				flg_nextc_trns = False
			Else
				char_  = Mid( str, i   , 1 )
				next_c = Mid( str, i+1 , 1 )

				Select Case next_c
				Case "゚" , "゙" 
					If widedicANK.Exists( char_ & next_c ) Then
						char_ = char_ & next_c
						flg_nextc_trns = True
					End If				
				Case "ィ" , "ェ"
					If Option_ Then
						If widedicANK.Exists( char_ & next_c ) Then
							char_ = char_ & next_c
							flg_nextc_trns = True
						End If
					End If				
				Case Else
				End Select

				If widedicASCII.Exists( char_ ) Then
					trns_ = widedicASCII.Item( char_ )
				Else
					If widedicANK.Exists( char_ ) Then
						trns_ = widedicANK.Item( char_ )
					Else
						trns_ = char_
					End If
				End If
				rtn = rtn & trns_
			End If
		Next

		If flg_nextc_trns = False Then
			char_  = Right( str, 1 )
			If widedicASCII.Exists( char_ ) Then
				trns_ = widedicASCII.Item( char_ )
			Else
				If widedicANK.Exists( char_ ) Then
					trns_ = widedicANK.Item( char_ )
				Else
					trns_ = char_
				End If
			End If
			rtn = rtn & trns_
		End If

		ToWideAll = rtn
	End Function

	Function ToWideASCII( byref str )
		Dim rtn, max_, char_, trns_
		rtn = ""
		max_ = len( str )
		For i = 1 to max_
			char_  = Mid( str,i, 1 )
			If widedicASCII.Exists( char_ ) Then
				trns_ = widedicASCII.Item( char_ )
			Else
				trns_ = char_
			End If
			rtn = rtn & trns_
		Next

		ToWideASCII = rtn
	End Function

	Function ToWideKANA( byref str , byval option_ )
		Dim rtn, max_, char_, trns_, next_c, flg_nextc_trns
		rtn = ""
		max_ = len( str ) - 1
		flg_nextc_trns = False
		For i = 1 to max_
			If flg_nextc_trns = True Then
				flg_nextc_trns = False
			Else
				char_  = Mid( str, i   , 1 )
				next_c = Mid( str, i+1 , 1 )

				Select Case next_c
				Case "゚" , "゙"
					If widedicANK.Exists( char_ & next_c ) Then
						char_ = char_ & next_c
						flg_nextc_trns = True
					End If				
				Case "ィ" , "ェ"
					If option_ Then
						If widedicANK.Exists( char_ & next_c ) Then
							char_ = char_ & next_c
							flg_nextc_trns = True
						End If
					End If				
				Case Else
				End Select

				If widedicANK.Exists( char_ ) Then
					trns_ = widedicANK.Item( char_ )
				Else
					trns_ = char_
				End If
				rtn = rtn & trns_
			End If
		Next

		If flg_nextc_trns = False Then
			char_  = Right( str, 1 )
			If widedicANK.Exists( char_ ) Then
				trns_ = widedicANK.Item( char_ )
			Else
				trns_ = char_
			End If
			rtn = rtn & trns_
		End If

		ToWideKANA = rtn
	End Function
End Class

 

張り付けると、設定画面はこんな感じになります。

コメントを残す

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

Related Post