VBのprint #n,xxで日本語の含まれた文字列をレコード出力すると、レコードの長さがまちまちになってしまいます。相手のアプリがレコード中のカラム位置でデータを使用するため位置がずれて困ってしまいます。全角2バイト文字は2バイトで、半角、英数字は1バイトでレイアウト通りに出力する簡単な方法はありませんでしょうか?
どの様になっているかは良く判りませんが
VB6かVB5なら
とりあえず文字及文字列のバイト数は
LenB(StrConv("文字列", vbFromUnicode))で判ります。
これを使って「xx」を「レイアウト通りに」して書き込んだらいかがですか。
>全角2バイト文字は2バイトで、半角、英数字は1バイトでレイアウト通りに出力する簡単な方法はありませんでしょうか?
ローカルの文字コードに依存しますが、
Dim strbuf() as Byte
strbuf = StrConv("abcdefあいうえお", vbFromUnicode)
などで、strbufをバイナリで書き込めば期待の書き込みになるはずです。
ご返答ありがとうございます。
ちょっと解かりにくいので、「全角半角交じりの文字列を後ろにスペースを詰めて、一定の長さの文字列にしたい。」(と質問を変えて見たいと思います。)
詰めるスペースを決めるための、len()は総文字数、lenB()は半角を2バイト(ユニコード)にみなしたバイト数(結局同じ?)が出てきてしまいます。strcnvもこの目的には使えませんでした。要は、「全角半角交じりの文字列の本当の長さ(?)」っていう全く基本的な命題になってしまいました。何か変ですかね。何処か勘違いしていますかね?文字全部調べて全角半角数えるの?(トホホッ)スマートじゃない。
よろしくお願いします。
以下の方法で取れると思いますが・・・
左から文字長をとってくるので足らなければスペースが、多ければ切り捨てられます。
<コード>
StrConv(LeftB$(StrConv("文字列" & Space$(文字長), vbFromUnicode), 文字長), vbUnicode)
ありがとうございました。
すみません、やっぱりおいぼれてボケていたようで、いちゆさんのお教えで良かったのですね。そして、吉野さんので完璧ですか。ねろさんも皆さんありがとうございました。
ツイート | ![]() |