[リストへもどる]
一括表示

投稿時間:2002/10/28(Mon) 17:50
投稿者名:
Eメール:
URL :
タイトル:
1バイト文字?2バイト文字?
お初です。松と申します。
以前からちょくちょく覗かせていただいてたのですが、みなさん結構ハイレベルですね。
そんな中、こんな質問するのも恥ずかしいのですが、初歩的過ぎるのかどこ調べても前々出てきません…
お願いします!誰か教えて下さいm(_)m

質問:VBで1バイト文字なのか2バイト文字なのかを返す関数等、あります?


left関数など、指定した場所の文字を返す関数ってありますよね。
例えばleft関数として…

ret = Left("123456789", 7)

この場合は「ret="1234567"」ですね。でも…

ret = Left("あいうえおかきくけこ", 7)

この場合は「ret="あいうえおかき"」になっちゃいます。
私が今組んでるプログラムでは都合上、バイト単位で返値が欲しいのでLeft関数ではなくLeftB関数を使いました。

ret = LeftB("あいうえおかきくけこ", 7)

イミディエイトウインドウには「ret = "あいう"」
…マジ?出来てるの?
違いますよね。これは「ret = "あいう+“え”のコードの半分"」ですよね。
結果、これをファイルに書き込むと…

「あいう?」

…あいう?
こっちが聞きたいっちゅうに(ToT)

それで考えたのが質問の「1バイトなのか2バイトなのかを調べる」を使って、
1バイトなら
ret = LeftB("123456789", 7)
2バイトなら
ret = LeftB("あいうえおかきくけこ", 6)
にしてしまおうと…


誰か分かる方居ません?
お願いします。VB初心者に愛の手を!!!

投稿時間:2002/10/28(Mon) 18:37
投稿者名:あき☆彡
Eメール:
URL :
タイトル:
Re: 1バイト文字?2バイト文字?
VB4の32Bit版から半角も全角も2バイトです・・・

半角を1バイト、全角を2バイトで取得したい場合
LenBとStrConv関数を使います。
Debug.Print LenB(StrConv("あ", vbFromUnicode))
2
Debug.Print LenB(StrConv("1", vbFromUnicode))
1

>1バイトなら
>ret = LeftB("123456789", 7)
これで取得されるのって123ですよね?

>2バイトなら
>ret = LeftB("あいうえおかきくけこ", 6)

例えば、
("123456789", 7)は"1234567"
("あいうえおかきくけこ", 7)は"あいう"
と取得したいのであれば関数を作ってしまいましょう。
(試しに作ってみたけど、、、おかしい所あるかも&もっと良い方法あるかも(;^-^A)

Public Function LeftBEX(ByVal sStr As String, ByVal lByte As Long) As String
    Dim sWk As String
    LeftBEX = ""
    sWk = StrConv(LeftB(StrConv(sStr, vbFromUnicode), lByte), vbUnicode)
    If LenB(StrConv(Left(sStr, Len(sWk)), vbFromUnicode)) > lByte Then
        LeftBEX = Left(sStr, Len(sWk) - 1)
    Else
        LeftBEX = sWk
    End If
End Function

これで
Debug.Print LeftBEX("123456789",7)
"1234567"

Debug.Print LeftBEX("あいうえおかきくけこ",7)
"あいう"

Debug.Print LeftBEX("あ1い2う3え4お5か6き7く8け9こ",7)
"あ1い2"
と求まります。

投稿時間:2002/10/29(Tue) 09:17
投稿者名:
Eメール:
URL :
タイトル:
Re^2: 1バイト文字?2バイト文字?
> >1バイトなら
> >ret = LeftB("123456789", 7)
> これで取得されるのって123ですよね?

ありゃ…?今確かめたら確かにそうですね…
Debug.Printで表示させると123になってます…
私のコーディングミスでしょうか、全角四文字を使って…つまり

ret = LeftB("あいうえ", 7)

だとちゃんと返って来なかったもんで…


でもこれはこれ、初心者としての知識不足の他にも問題が出来たわけで(汗
そうなんです、あき☆彡さんとnobuさんの両方が指摘している通り、目的は

「7バイトを超えた分は切り捨て!あくまで7バイトまで欲しい!」

だったのです…
でも、お二方のお教えによって何とかなりそうです。
本当に助かりました!ありがとう御座いますm(_)m


さぁて、やってみよっと♪

投稿時間:2002/10/28(Mon) 19:28
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: 1バイト文字?2バイト文字?
> 質問:VBで1バイト文字なのか2バイト文字なのかを返す関数等、あります?

下記なども参照して見て下さい。

[ LenBB ]
指定した文字列のバイト数(半角1,全角2バイト)を返します。
http://www.remus.dti.ne.jp/~y-mac/fnclib/lenbb.htm


[ MidBB ]
文字列の指定バイト位置からバイト数分(半角1,全角2バイト)の文字列を返します。
http://www.remus.dti.ne.jp/~y-mac/fnclib/midbb.htm

投稿時間:2002/10/29(Tue) 09:27
投稿者名:
Eメール:
URL :
タイトル:
Re^2: 1バイト文字?2バイト文字?
ありゃ、こっちでも良かったり…
あき☆彡さんへのレスの方にまとめて書かせていただいたのですが、本来の目的に則した使い方をする。
となると、やっぱりこのような「文字が半角か全角か?」という事を調べられなきゃいけないんですよ。

今作ってるのは習作のプログラムですので、
どっちかというとこの関数を参考にして作るのも勉強になりそうですね♪

本当にありがとう御座いました!勉強になりました!



いやしかし、余談になりますが…
皆さんのレスの速さには本当にビックリ…