人気ブログランキング | 話題のタグを見る

[VBScript] 半角カナを全角へ、全角記号&英数は半角へ変換する関数

どーもボキです。

AdjustStringは
 ・半角カナ → 全角カナ
 ・全角記号 → 半角記号
 ・全角英数 → 半角数字
と変換する関数。

半角カナは、濁点(゛)や半濁点(゜)が別の文字となる、つまり、次の文字まで読まないと文字を確定できない。
そのため、今回はひとつの関数内で変換元の文字管理と変換処理を行った。

全角と半角とで文字の並びが統一されていなかったため、Case文処理が必須だったものの、可能な限り定型処理化した。
[VBScript] 半角カナを全角へ、全角記号&英数は半角へ変換する関数_a0021757_12555734.gif

SetScriptHost("cscript")

s = "どーもボキです"
dprintf " 前:" & s
dprintf " 後:" & AdjustString(s)
dprintf ""

s = "http://yozda.exblog.jp"
dprintf " 前:" & s
dprintf " 後:" & AdjustString(s)
dprintf ""

s = "2004/05~"
dprintf " 前:" & s
dprintf " 後:" & AdjustString(s)
dprintf ""

' ===============================================================================
' 全角→半角
Function AdjustString(iStr)
Dim i,a1,a0,r,s,s0,s1

i = 1
r = ""
Do While i <= Len(iStr)
a1 = 1
a0 = 0
s0 = ""
s = Mid(iStr, i, 1)
r = s
If ( Asc(s) >= Asc("。") ) And ( Asc(s) <= Asc("゚") ) Then
' 半角カナ → 全角
Select Case s
Case "。" r = "。"
Case "ヲ" r = "ヲ"
Case "ッ" r = "ッ"
Case "ー" r = "ー"
Case Else
If Asc(s) >= Asc("゙") Then
s0="゙": s1="゛": a1=1
ElseIf Asc(s) >= Asc("ワ") Then
s0="ワ": s1="ワ": a1=4
ElseIf Asc(s) >= Asc("ラ") Then
s0="ラ": s1="ラ": a1=1
ElseIf Asc(s) >= Asc("ヤ") Then
s0="ヤ": s1="ヤ": a1=2
ElseIf Asc(s) >= Asc("ム") Then
s0="ム": s1="ム": a1=1
ElseIf Asc(s) >= Asc("マ") Then
s0="マ": s1="マ": a1=1
ElseIf Asc(s) >= Asc("ハ") Then
s0="ハ": s1="ハ": a1=3
If Mid(iStr, i+1, 1) = "゙" Then a0=1
If Mid(iStr, i+1, 1) = "゚" Then a0=2
ElseIf Asc(s) >= Asc("ナ") Then
s0="ナ": s1="ナ": a1=1
ElseIf Asc(s) >= Asc("ツ") Then
s0="ツ": s1="ツ": a1=2
If Mid(iStr, i+1, 1) = "゙" Then a0=1
ElseIf Asc(s) >= Asc("タ") Then
s0="タ": s1="タ": a1=2
If Mid(iStr, i+1, 1) = "゙" Then a0=1
ElseIf Asc(s) >= Asc("カ") Then
s0="カ": s1="カ": a1=2
If Mid(iStr, i+1, 1) = "゙" Then a0=1
ElseIf Asc(s) >= Asc("ア") Then
s0="ア": s1="ア": a1=2
ElseIf Asc(s) >= Asc("ャ") Then
s0="ャ": s1="ャ": a1=2
ElseIf Asc(s) >= Asc("ァ") Then
s0="ァ": s1="ァ": a1=2
ElseIf Asc(s) >= Asc("、") Then
s0="、": s1="、": a1=4
ElseIf Asc(s) >= Asc("「") Then
s0="「": s1="「": a1=1
End If
End Select
ElseIf ( Asc(s) >= Asc(" ") ) And ( Asc(s) <= Asc("z") ) Then
' 全角記号&英数 → 半角
Select Case s
Case " " r=" "
Case "," r=","
Case "." r="."
Case ":" r=":"
Case ";" r=";"
Case "?" r="?"
Case "!" r="!"
Case "^" r="^"
Case "_" r="_"
'Case "ー" r="-" ' 全角文字で利用するため半角変換しない
Case "―" r="-"
Case "‐" r="-"
Case "/" r="/"
Case "\" r="\"
'Case "~" r="~" ' 全角文字で利用するため半角変換しない
Case "|" r="|"
Case "’" r="'"
Case "”" r=""""
Case "(" r="("
Case ")" r=")"
Case "[" r="["
Case "]" r="]"
Case "{" r="{"
Case "}" r="}"
'Case "「" r="「" ' 全角文字で利用するため半角変換しない
'Case "」" r="」" ' 全角文字で利用するため半角変換しない
Case "+" r="+"
Case "-" r="-"
Case "=" r="="
Case "<" r="<"
Case ">" r=">"
Case "′" r="'"
Case "″" r=""""
Case "¥" r="\"
Case "$" r="$"
Case "%" r="%"
Case "#" r="#"
Case "&" r="&"
Case "*" r="*"
Case "@" r="@"
Case Else
If Asc(s) >= Asc("a") Then
s0="a": s1="a"
ElseIf Asc(s) >= Asc("A") Then
s0="A": s1="A"
ElseIf Asc(s) >= Asc("0") Then
s0="0": s1="0"
End If
End Select
End If
If s0 <> "" Then r=Chr( (Asc(s) -Asc(s0))*a1 +Asc(s1) +a0) ' 変換処理
AdjustString = AdjustString & r

i = i +1 +Abs(CInt(a0 > 0))
Loop
End Function
' ===============================================================================
' 実行ホストを切り替える
Sub SetScriptHost(HostName)
Dim i,s

If InStr(LCase(WSCript.FullName), LCase(HostName)) <> 0 Then Exit Sub

s = HostName & " """ & WScript.ScriptFullName & """"
If WScript.Arguments.Count > 0 Then
For i = 0 To WScript.Arguments.Count -1
s = s &" """ & WScript.Arguments.Item(i) & """" ' 引数
Next
End If
CreateObject("WScript.Shell").Run s
WScript.Quit
End Sub
' -------------------------------------------------------------------------------
' デバッグ
Dim objDbg
' クラス
Class TDebug
Dim FCScript

' 初期化処理
Private Sub Class_Initialize()
FCScript = InStr(LCase(WSCript.FullName), "cscript") > 0
End Sub

' 終了処理
Private Sub Class_Terminate()
If Not FCScript Then Exit Sub

WScript.StdOut.WriteLine NOW & " [END]"
WScript.StdIn.ReadLine
End Sub

' CScriptホストかどうか
Public Property Get CScript
CScript = FCScript
End Property

' デバッグメッセージ処理
Public Sub dprintf(v)
Dim i,s,ityp
If Not FCScript Then Exit Sub

s = v
ityp = VarType(v)
If ityp = vbBoolean Then
s = CStr(v)
ElseIf VarType(v) >= vbArray Then
s = ""
For i = 0 to UBound(v)
s = s & "dprintf(" &i& ")=" & v(i) & vbCRLF
Next
End If
WScript.Echo s
End Sub
End Class
' 関数
Sub dprintf(v)
If VarType(objDbg) = vbEmpty Then
Set objDbg = New TDebug
objDbg.dprintf(NOW & " " & WScript.ScriptFullName)
End If
objDbg.dprintf(v)
End Sub
' -------------------------------------------------------------------------------
[VBScript] 全角文字を半角文字へ変換する

by yozda | 2017-08-18 20:40 | プログラミング | Comments(0)