|
>今回は半角文字の対応はしなくても大丈夫そうなのですが、これをきちんと出す方法があれば、
>後学のために教えていただけるとうれしいです。
これへの対応方法について興味が湧いたので、その対応方法を考えてみました。
細かな処理を要するので、関数化します。
Function FnGetStr(ByVal strUni As String _
, lngJisLen As Long _
, strAddFull As String _
, strAddHalf As String) As String
'UnicodeのstrUni文字列から、Shift-Jisで数えてlngJisLen分のバイト数の文字列を切り出す関数
'引数 strUni 文字列の切り出し元となるUnicodeの文字列)
' lngJisLen 切り出すバイト数(Shift-Jisで計算)
' strAddFull strUniがlngJisLenより短い場合に付加する全角の文字
' strAddHalf strUniのバイト数が奇数になる場合に付加する半角の文字
'返り値 UnicodeのstrUni文字列から、Shift-Jisで数えてlngJisLen分のバイト数分を取り出した文字列(Unicode)
Dim i As Long
Dim strJis(1) As String '添え字:0=前回ループ、1=今回ループ
Dim lngLen As Long
Dim strRslt As String
Dim strDbgUni As String 'デバッグ用
'strUniがlngJisLenよりも短い場合に備えて、全角文字を付加
strUni = strUni & String(lngJisLen, strAddFull)
'Shift-JisによるstrUniのバイト数を調査。
For i = Int(lngJisLen / 2) To Len(strUni)
strJis(1) = Left(strUni, i)
strJis(1) = StrConv(strJis(1), vbFromUnicode)
If (LenB(strJis(1)) > lngJisLen) Then
Exit For
End If
strJis(0) = strJis(1)
strDbgUni = StrConv(strJis(0), vbUnicode) 'デバッグ用
Next i
'strUniから該当部分を切り出す。
strRslt = Left(strUni, i - 1)
lngLen = LenB(strJis(0))
'Shift-Jisのバイト数が奇数になってしまう場合に備えて、半角文字を追加
If lngJisLen - lngLen = 1 Then
strRslt = strRslt & strAddHalf
End If
FnGetStr = strRslt
End Function
|
|