ワテの場合、C# を使い始めてからかなりの年月が経つのだが、Console.WriteLine() の書式指定が未だに覚えられない。
Console.WriteLine() とは、C#のコンソールアプリケーション、つまり実行するとコンソール画面(所謂DOSウインドウ)を表示してそこに実行結果を出力させたりあるいはキーボードからの入力を読み取ったりするアプリケーションにおいて、画面出力を行う命令だ。
それに対して、Windowsフォームアプリならデフォルトではコンソールを出さないようになっている。その場合には、後から AllocConsole(), AttachConsole(), FreeConsole() などの手法を使えばコンソール画面を出したり消したりする事が可能だ。
当記事では、C#のコンソール画面に数字を出力する場合の書式指定で
- 右詰め
- ゼロ埋め
- 桁指定
- 16進
などに付いて調査した。
では、本題に入ろう。
C#のコンソール画面に書式指定して数字を出力する
さて、良く使う書式設定の一つに、整数を出力する場合がある。
以下、自分用のメモとしてまとめてみた。
整数 200 を各種の形式で出力する例だ。
希望出力形式 | 出力例 | 書式 |
10進 | 200 | {0:d} |
10進 9桁 左詰 | 200______ | {0,-9:d} |
10進 9桁 右詰 | ______200 | {0,9:d} |
10進 6桁 0埋 | 000200 | {0:d6} |
10進 9桁 0埋 左詰 6桁 | 000200___ | {0,-9:d6} |
10進 9桁 0埋 右詰 6桁 | ___000200 | {0,9:d6} |
16進 x小文字 | c8 | {0:x} |
16進 6桁 0埋 | 0000c8 | {0:x6} |
16進 9桁 0埋 右詰x | ___0000c8 | {0,9:x6} |
16進 9桁 0埋 右詰X | ___0000C8 | {0,9:X6} |
16進 9桁 0埋 左詰X | 0000C8___ | {0,-9:X6} |
などかな。
なお {0:d} などの書式の数字の 0 は書式指定で
Console.WriteLine( "{0}、{1}", "第1番目の引数", "第2番目の引数");
と並べた場合の最初の引数(第一番目)を意味している。
必要に応じて {0}, {1}, {2} などに置き換えると良いだろう。
そのサンプルソースは以下の通り。
C# Console.WriteLine 右詰め、ゼロ埋め、桁指定、16進など
与えられた整数に対して、出力桁数の指定、右詰め、左詰め、ゼロ埋めなどを行ってみた。
public static void console_wrieline_test() { int i = 200; Console.WriteLine("->{0:d}<- ", i); // 10進 ->200<- Console.WriteLine("->{0,-9:d}<- ", i); // 10進 9桁 左詰 ->200 <- Console.WriteLine("->{0,9:d}<- ", i); // 10進 9桁 右詰 -> 200<- Console.WriteLine("->{0:d6}<- ", i); // 10進 6桁 0埋 ->000200<- Console.WriteLine("->{0,-9:d6}<-", i); // 10進 9桁 0埋 左詰 6桁 ->000200 <- Console.WriteLine("->{0,9:d6}<- ", i); // 10進 9桁 0埋 右詰 6桁 -> 000200<- Console.WriteLine("->{0:x}<- ", i); // 16進 x小文字 ->c8<- Console.WriteLine("->{0:x6}<- ", i); // 16進 6桁 0埋 ->0000c8<- Console.WriteLine("->{0,9:x6}<- ", i); // 16進 9桁 0埋 右詰 -> 0000c8<- Console.WriteLine("->{0,9:X6}<- ", i); // 16進 9桁 0埋 右詰X -> 0000C8<- Console.WriteLine("->{0,-9:X6}<-", i); // 16進 9桁 0埋 左詰X ->0000C8 <- }
こんな感じかな。
10進の場合、dでもDでも同じだ。
16進の場合には、xとXが使えるが、大文字、小文字に応じて出力結果のアルファベットも大小が変化する。
ちなみに、
C/C++ の printf の書式指定もややこしい。
昔、一所懸命覚えていたが、最近は C/C++ をあまり書かなくなってしまったので忘れてしまった。
確か、
%s 文字列
%f20.15 浮動小数点20桁幅に15桁で出力
とかなるんだったかな?
文字列の数字に0を連結する方法
上で紹介した例は、入力が整数だった。
では、整数が文字列型で与えられている場合に、全体の長さを5文字、左にはゼロを埋めたい。
そう言う場合はどうするか。
- String.PadLeft メソッド (Int32)
- String.PadLeft メソッド (Int32, Char)
を使うと良い。
string before = "123"; string after = brfore.PadLeft(5, '0'); Console.WriteLine("after={0}", after);
その実行結果。
00123
こんな感じだ。
文字列の右側に文字を追加した場合には、
- String.PadRight メソッド (Int32)
- String.PadRight メソッド (Int32, Char)
もある。
なお、埋めたいCharを指定しない場合には空白文字で埋められる。
C#関連本を読む
ほんまに楽しいんかい?
と思ったが、川俣 晶さんの本だ。有名な人だ。
ネットの各種解説記事でも良くお世話になった。今も。
C#が書ける猫はおらんだろ!
シーとかシャーとか鳴く猫はおるけど。訓練すればシーシャープと鳴くかな。
こういうシリーズでC#の本出して欲しい。
コメント