DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォーマットされた文字列作成

環境/言語:[VB2005]
分類:[.NET]

文字の位置を揃えた文字列を作りたいと思っています。位置の計算は半角単位計算です(全角文字は半角2文字として計算)。
たとえば下のように ":" の位置をそろわせるような感じです。

あいう     :
あいうえ   :

このようなことは、C言語ではsprintf関数を使用して
 sprintf(s, "%-15s:", "あいう");
 sprintf(s1, "%-15s:", "あいうえ");
とすると、どちらの場合も ":" が半角換算で16文字目の位置にそろってくれます。

同じことVB2005でFormatメソッドを使用して
 String.Format("{0,-15}:", "あいう")
 String.Format("{0,-15}:", "あいうえ")
のようにとすると : の位置がずれてしまいます(全角も半角も1文字として計算してしまう)。

Cのsprintfのように半角換算で位置を合わせて文字列をフォーマットする方法はありませんでしょうか。

よろしくお願いします。
まあ所謂半角二文字で全角一文字と言うのはごく限られた狭い世界の話で。プロポーショナルフォントはもとより、太字にしただけでも崩れるような儚いお約束。

System.Text の Encoding クラスを使って、文字列のバイト数を取得して足りない分を PadLeft/PadRight するのが手っ取り早いでしょう。
ANSI 相当のは Encoding.Default ですね。
まあ所謂半角二文字で全角一文字と言うのはごく限られた狭い世界の話で。プロポーショナルフォントはもとより、太字にしただけでも崩れるような儚いお約束。

System.Text の Encoding クラスを使って、文字列のバイト数を取得して足りない分を PadLeft/PadRight するのが手っ取り早いでしょう。
ANSI 相当のは Encoding.Default ですね。
回答ありがとうございます

■No16868に返信(Hongliangさんの記事)
> まあ所謂半角二文字で全角一文字と言うのはごく限られた狭い世界の話で。プロポーショナルフォントはもとより、太字にしただけでも崩れるような儚いお約束。

儚いお約束が成り立つの話なので。。。

> 
> System.Text の Encoding クラスを使って、文字列のバイト数を取得して足りない分を PadLeft/PadRight するのが手っ取り早いでしょう。
> ANSI 相当のは Encoding.Default ですね。

やはり、このような計算をしなければならないということですか
回答ありがとうございます

■No16868に返信(Hongliangさんの記事)
> まあ所謂半角二文字で全角一文字と言うのはごく限られた狭い世界の話で。プロポーショナルフォントはもとより、太字にしただけでも崩れるような儚いお約束。

儚いお約束が成り立つの話なので。。。

> 
> System.Text の Encoding クラスを使って、文字列のバイト数を取得して足りない分を PadLeft/PadRight するのが手っ取り早いでしょう。
> ANSI 相当のは Encoding.Default ですね。

やはり、このような計算をしなければならないということですか

DOBON.NET | プログラミング道 | プログラミング掲示板