Left()とLeftB()の違いについて

解決


kton  2007-03-17 03:30:06  No: 98301

現在テキストファイルからデータと取り出す作業をしています。

テキストファイルは、

1○○○○
2○○○○
3○○○○

10○○○○
11○○○○

という風に数字の横に言葉が入っています。
先頭についている数字だけ取得したいのでLeftB(TEXT,2)としました。
これは一桁の数字が全角で、2桁の数字が半角であるためです。

For i = 1 to 20
    Number = LeftB(TEXT,2)
Next i
↑このようにしました。
1〜9までは良いのですが10〜20が文字を一つしか取ってきてくれません。

全角の文字の1と半角文字の10は同じ2バイトだと思ったのですが・・・。
LeftBの使い方が間違っているのでしょうか。


よねKEN  URL  2007-03-17 06:34:13  No: 98302

それをやるなら以下のように修正ですね。

Number = LeftB(TEXT,2)
  ↓
Number = StrConv(LeftB(StrConv(TEXT, vbFromUnicode), 2), vbUnicode)

VB6のStringは内部的にUnicodeで扱っていますので、
全角でも半角でも1文字2バイトです。
ですので、StrConv関数で一旦SJISにしてLeftBした後、
再度StrConv関数でUnicodeに戻してやる必要があります。


kton  2007-03-18 01:18:53  No: 98303

ありがとうございます。
よねKENさんの言うように修正した所うまく取れました。
Unicodeを一旦SJISにしなければ駄目だったのですね。
まだまだ勉強が足りませんでした。
よねKENさん。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加