アプリ版:「スタンプのみでお礼する」機能のリリースについて

テキストのバイト長を取得したく「LenB関数」を使用したのですが、Unicodeの為、半角も全角も全て2バイトでカウントされてしまいます。

「StrConv関数」もVBScriptにはないため、どうしたものかと困っています。

一文字ずつコード値を出して、1バイトか2バイトに振り分けるという処理は、データの量からして現実的ではありません。

なにかよい方法がありましたらおしえてください。

よろしくお願いします。

A 回答 (2件)

参考URLのような関数を作成すれば、ご希望のバイト長を出すことができます。

JavaScriptで書かれていますが、VBScriptからも呼び出すことができます。

<SCRIPT TYPE="text/JavaScript"> ~ </SCRIPT>で囲んで、メインのスクリプトより前に記述してください。

参考URL:http://www.tohoho-web.com/js/string.htm#StrLength

この回答への補足

<SCRIPT language="JScript" SRC="./Script.js"></SCRIPT>

で呼び出してあげたらうまくいきました!

ありがとうございました。

補足日時:2005/06/15 10:02
    • good
    • 0
この回答へのお礼

G_Aminoさん
ありがとうございます。

「Script.js」に「jstrlen関数」を記述し、

呼び出し元のwsfに下記の記述で呼び出したところ、
<SCRIPT TYPE="text/javascript" SRC="./Script.js"></SCRIPT>

javaScriptと認識されたためか、呼び出し元ソースでエラーとなってしまいました。

wsfでも使えますでしょうか?

お礼日時:2005/06/15 09:36

厳密な意味で、半角・全角ではなくて、Ansi とUnicodeの日本文字の半角文字を半角として取り扱うということです。

該当する半角だけ選りだして、その数を数えて、

LenB(全体)-Len(半角)

としています。つまり、半角として認めたもののみが、半角として数えられる、ということで、実際は、もう少し時間を掛けたテストが必要かもしれません。

Function ByteChk(arg1)
Set objRe = CreateObject("VBScript.RegExp")
With objRe
.Pattern = "([\u0021-\u007e]+|[\uff61-\uff9f]+)"
.Global = True
Set Matches = .Execute(arg1)
For Each Match In Matches
LenCnt = LenCnt + Len(Match.Value)
Next
End With
ByteChk = LenB(arg1) - LenCnt
Set Matches = Nothing
Set objRe =Nothing
End Function
    • good
    • 0
この回答へのお礼

Wendy02さん

ありがとうございます。お礼が遅くなって申し訳ありません。
確かに全ケース洗い出してテストする必要がありそうです。

G_Aminoさんに教えていただいたものもそうですが、
一文字ずつ処理していくと処理時間がかかってしまい、
結局BASP21に頼ることにしました。

数GByte単位のファイルを処理するので・・・

お礼日時:2005/06/24 10:17

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

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