教えて! goo のコンテンツに対する取り組みについて

以前LenBに関して質問した者です。

今回は
「ある文字列の○byte目から△byte分取得する」という処理で困っています。

MidB関数を使うと思うのですが、Unicodeの為、
BASP21の.KconvでSJISに変換してあげています。

HOGEasc = objBasp.Kconv(MidB(tmpLine, ○, △),1)

ここで問題となるのが、切り出した文字列が化けてしまうのです。
以下のようにもう一度Unicodeに変換してあげてもダメです。
HOGEuni = objBasp.Kconv(HOGEasc,4)

いろいろ試してみましたが、お手上げ状態です。
このような処理はできないのでしょうか?

どうぞよろしくお願いいたします。

gooドクター

A 回答 (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)
    • good
    • 0
この回答へのお礼

Wendy02さん

ありがとうございます。
やりたいことができました。

ただ、やはり処理時間がかかってしまい、
VBScriptの限界なのかなと思い始めています。

まだ、考え中なので、このままオープンとさせていただきます。

不躾にもかかわらず、丁寧に教えてくださりありがとうございました。

お礼日時:2005/06/27 18:52

>VBScriptの限界なのかなと思い始めています。



はい、少なくとも私はそう思っています。wsf に使うのは、別に、VBScript だけでもありません。大量なら、Perlという手もあります。

ただ、「開始位置:2 、指定バイト長:5」というような考え方自体に無理があるのかもしれません。
    • good
    • 0

バイトで(決め撃ちで)切り出してるんだから、化けてもしょうがないですよね。



何がしたいのかよくわかりません。

この回答への補足

すみません。補足します。

================================
tmpLine:"123456789あいうえお"

開始位置:2 、指定バイト長:5 > "23456"
開始位置:10、指定バイト長:4 > "あい"
================================

このような結果を返したいのです。

補足日時:2005/06/23 16:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング