MidA(文字列, 開始バイト位置, バイト長)関数を作る(VBScript)
Mid(文字列, 開始文字位置, 文字長)でもなく、
MidB(バイト列, 開始バイト位置, バイト長)でもない、
MidA(文字列, 開始バイト位置, バイト長)関数。
Unicode文字列からシフトJISコードでの開始バイト位置とバイト長で切り出します。
当然、2バイト文字の泣き分かれの可能性があるので、その場合は、1バイト前や、1バイト短くなります。
まず、VBScriptで、
MsgBox MidA("abcdefg",3,2)
MsgBox MidA("あいうefg",3,2)
MsgBox MidA("あいうefg",3,3)
MsgBox MidA("aいうefg",3,2)
MsgBox MidA("aいうefg",3,3)
Function MidA(Str,bStart,bLength)
Dim aStart,aLength,bPosition,aPosition
aStart=0
aLength=-1
bPosition=1
For aPosition=1 To Len(Str)
If aStart=0 Then
If bStart=bPosition Then
aStart=aPosition
ElseIf bStart<bPosition Then
aStart=aPosition-1
bStart=bPosition-2
End If
Else
If bStart+bLength=bPosition Then
aLength=aPosition-aStart
Exit For
ElseIf bStart+bLength<bPosition Then
aLength=aPosition-aStart-1
bLength=bPosition-bStart-2
Exit For
End If
End If
bPosition=bPosition+1-(Asc(Mid(Str,aPosition,1))<0)
Next
If aStart Then
If aLength=-1 Then
aLength=aPosition-aStart
bLength=bPosition-bStart
End If
MidA=Mid(Str,aStart,aLength)
End If
End Function
引数の位置と長さは、補正後の値を返すように、ByRefにしています。
« 文字列中の異文字を16進表示する関数(VB.NET) | トップページ | MidA(文字列, 開始バイト位置, バイト長)関数を作る(VBA) »