[文字列の一部分を取得する(ASCII)]
文字数を指定して、文字列の一部分を抜き出します。
LeftB(), MidB(), RightB() 関数は、UNICODE のバイト数で処理するので、アスキー文字(シフトJIS)用の処理を作ってみました。
【ソースコード】
[tips0025.vbs]
Option Explicit
Function MidAscByte(ByVal strSjis, ByVal lngStartPos, ByVal lngGetByte, ByVal blnZenFlag)
Dim lngByte
Dim lngLoop
Dim strChkBuff
Dim strLastByte
On Error Resume Next
MidAscByte = ""
If lngGetByte = "" Then
lngGetByte = Len(strSjis) * 2
End If
lngGetByte = CLng(lngGetByte)
lngByte = 0
For lngLoop = 1 To Len(strSjis)
strChkBuff = Mid(strSjis, lngLoop, 1)
If (Asc(strChkBuff) And &HFF00) = 0 Then
lngByte = lngByte + 1
Else
lngByte = lngByte + 2
If lngByte = lngStartPos Then
If blnZenFlag = True Then
MidAscByte = " "
Else
MidAscByte = Asc(strChkBuff) And &H00FF
If MidAscByte < 0 Then
MidAscByte = 256 + MidAscByte
End If
MidAscByte = ChrB(MidAscByte)
End If
lngLoop = lngLoop + 1
End If
End If
If lngByte >= lngStartPos Then
Exit For
End If
Next
lngByte = LenB(MidAscByte)
If lngByte < lngGetByte Then
For lngLoop = lngLoop To Len(strSjis)
strChkBuff = Mid(strSjis, lngLoop, 1)
MidAscByte = MidAscByte & strChkBuff
If (Asc(strChkBuff) And &HFF00) = 0 Then
lngByte = lngByte + 1
Else
lngByte = lngByte + 2
End If
If lngByte >= lngGetByte Then
Exit For
End If
Next
End If
lngByte = LenAscByte(MidAscByte)
If lngByte > lngGetByte Then
If blnZenFlag = True Then
MidAscByte = Mid(MidAscByte, 1, Len(MidAscByte) - 1) & " "
Else
strLastByte = Fix((Asc(Right(MidAscByte, 1)) And &HFF00) / 256)
If strLastByte < 0 Then
strLastByte = 256 + strLastByte
End If
MidAscByte = Mid(MidAscByte, 1, Len(MidAscByte) - 1) & ChrB(strLastByte)
End If
End If
End Function
Function LeftAscByte(ByVal strSjis, ByVal lngGetByte, ByVal blnZenFlag)
LeftAscByte = MidAscByte(strSjis, 1, lngGetByte, blnZenFlag)
End Function
Function RightAscByte(ByVal strSjis, ByVal lngGetByte, ByVal blnZenFlag)
RightAscByte = StrReverse(strSjis)
RightAscByte = MidAscByte(RightAscByte, 1, lngGetByte, blnZenFlag)
RightAscByte = StrReverse(RightAscByte)
End Function
On Error Resume Next
Dim strAscii
strAscii = "abcあいうえおabc"
WScript.Echo "左端7バイトは「" & LeftAscByte(strAscii, 7, True) & "」です。"
WScript.Echo "3〜5バイトは「" & MidAscByte(strAscii, 3, 3, True) & "」です。"
WScript.Echo "右端7バイトは「" & RightAscByte(strAscii, 7, True) & "」です。"
【実行結果】
C:\> cscript //NoLogo tips0025.vbs
左端7バイトは「abcあい」です。
3〜5バイトは「cあ」です。
右端7バイトは「えおabc」です。