固定長文字列を設定していますが、漢字データが入るとデータ長が
変わってしまいます(漢字の個数分だけバイト数が多くなる)。
どうしても固定にしたいのですが。悩んでいます。
dim wk as string * 10
wk="ああいいう"
debug.print "[" & wk & "]"
すると[ああいいう ]こんな形で表示されます。
どうしても[ああいいう]こんな形で表示したいのです。
良い方法を教えてください 宜しくお願いします。
こうしたら一応
[ああいいう]で表示されました。
Dim wk As String * 10
wk = "ああいいう"
Debug.Print "[" & Trim(wk) & "]"
>固定長文字列を設定していますが、漢字データが入るとデータ長が
>変わってしまいます(漢字の個数分だけバイト数が多くなる)。
なにか勘違いがあります。
VBは内部処理はUnicodeで、半角も全角も必ず「1文字 = 2バイト」になります。
従って、
>dim wk as string * 10
は「10文字固定長 即ち 20バイト固定」で宣言・定義していますから
[ああいいう ]は
前半の10バイトに平仮名5文字、
後半の10バイトに半角スペース5文字が入り、
データ長は20バイトで変化していません。
しかし、例えば「Shift-JIS換算で10バイトにしたい」なら
vbFromUnicodeでStrConvしてバイト配列に放り込み、
第0要素〜第9要素を抜き出す、などで取得できますが、
10バイトに満たなかったときのパディングと
10バイト目が2バイトコードの1バイト目だったときの
処理は別途必要です。
また、処理後、ファイル保存するなら、
そのままバイト配列をBinaryで書き出せばいいですが、
TextBoxなどに表示したいなら、vbUnicodeでStrConvして、
一旦Unicodeに戻す必要があります。
(TextBoxはShift-JISしか表示できないが、
内部でUnicode→Shift-JIS変換をかけているので、
Textプロパティに渡すときはUnicodeでなければならないため。)