- ベストアンサー
[VBScript][wsh]byte単位でのデータの切り出し
- [VBScript][wsh]byte単位でのデータの切り出しについて困っています。MidB関数を使って文字列の一部を取得しようとしていますが、Unicodeのため表示が化けてしまいます。
- どうすれば文字列の一部を正しく取得できるでしょうか?
- 質問内容を理解いたしました。詳細を確認し、解決策を提供いたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>以前LenBに関して質問した者です。 前回の質問については、Openのままでは、回答した私としては、けじめがつきませんから、マナーとして、閉めてくださいませんか? >tmpLine:"123456789あいうえお" > >開始位置:2 、指定バイト長:5 > "23456" >開始位置:10、指定バイト長:4 > "あい" これは、wsf ではありませんが、このようにすればできるのでは? つまり、byte で数えて、byte 長に満たしたら、その文字の場所を出すという方法です。後は、wsf に合うように、換えてください。それから、あまり、長い文字列は、かなり遅くなりますね。 'bytecount: tmpline = "123456789あいうえお" kaishi = 2 wnum = 5 msg ="開始位置:" & kaishi & " 、指定バイト長:" & wnum Set objBasp = Wscript.CreateObject("Basp21") k = 1 For i = 1 To Len(tmpline) ReDim Preserve bufarray(k) moji =Mid(tmpline,i,1) bufarray(k) = LenB(objBasp.Kconv(moji, 1, 5)) k = k + 1 Next For j = 1 To UBound(bufarray) cnt1 = cnt1 + bufarray(j) If cnt1 > kaishi Then Exit For End If Next For m = j To UBound(bufarray) cnt2 = cnt2 + bufarray(m) If cnt2 > wnum Then Exit For End If Next Msgbox msg MsgBox Mid(tmpline, j, m - j)
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
>VBScriptの限界なのかなと思い始めています。 はい、少なくとも私はそう思っています。wsf に使うのは、別に、VBScript だけでもありません。大量なら、Perlという手もあります。 ただ、「開始位置:2 、指定バイト長:5」というような考え方自体に無理があるのかもしれません。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
バイトで(決め撃ちで)切り出してるんだから、化けてもしょうがないですよね。 何がしたいのかよくわかりません。
補足
すみません。補足します。 ================================ tmpLine:"123456789あいうえお" 開始位置:2 、指定バイト長:5 > "23456" 開始位置:10、指定バイト長:4 > "あい" ================================ このような結果を返したいのです。
お礼
Wendy02さん ありがとうございます。 やりたいことができました。 ただ、やはり処理時間がかかってしまい、 VBScriptの限界なのかなと思い始めています。 まだ、考え中なので、このままオープンとさせていただきます。 不躾にもかかわらず、丁寧に教えてくださりありがとうございました。