VB.NETにおける、ゼロ埋めする方法です。結構簡単です。
ゼロ埋めとは
IT業界でよくあるゼロ埋めです。例えば、数値10桁まで入力可能なテキストボックスに3桁だけ入れると、左の7桁は0で埋まるということを言います。図で表すと、こうなります。10桁まで入力可能&10桁未満はゼロ埋めしてくれるテキストボックスを用意しました。
まずは任意に3桁入れてみて実行ボタンを押下すると…
このように、入力したのは「123」の3桁ですが、左側に0が埋まりました。ゼロパディングとも言われ、プログラミングをしているとほぼ必ず遭遇するでしょう。では実際にゼロ埋めするソースコードを書いてみましょう。方法は3つあります。
PadLeftを使用してゼロ埋めする
とてもシンプルな方法です。StringクラスのPadLeftメソッドを使用します。上記のゼロ埋めするだけのシンプルな画面の実行ボタン押下イベントの中身です。
Private Sub cmdPadding_Click(sender As Object, e As EventArgs) Handles cmdPadding.Click Try txtPadNum.Text = txtPadNum.Text.PadLeft(10, "0"c) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
はい、たったこれだけです。PadLeftメソッドの引数については、
- 第1引数:文字列の長さ(バイト)
- 第2引数:埋めたい文字(1バイト)
となっています。細かいですが、第2引数は「“0”c」として下さい。「”0″」と書いて0埋めが出来ないと困っている人をよく見かけます。尚、PadLeftは1バイト文字であれば、任意の文字で埋めることが可能です。例えば「X」と埋めたい場合は「”X”c」と書けば、Xで埋めることも出来ます。
ToStringを使用してゼロ埋めする
ToStringを使用してゼロ埋めする方法も高頻度で見かけます。VB6からマイグレーションされたソースだと結構見かけますね。
Private Sub cmdPadding_Click(sender As Object, e As EventArgs) Handles cmdPadding.Click Dim intNum As Integer Try intNum = Integer.Parse(txtPadNum.Text) txtPadNum.Text = intNum.ToString("0000000000") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
Integer型のToStringメソッドを上記の様に使用すると、ゼロ埋めが可能です。
※テキストボックスのTextプロパティはString型なので、都合上、一度Integer型に変換しています。
上記のソースではInteger型をToStringしていますが、Integer型同様に数値を扱うShort型やLong型にもToStringメソッドが用意されていますので、Short型やLong型の変数でも同じようにゼロ埋めすることが可能です。
String.Formatを使用してゼロ埋めする
String.Formatを使用してゼロ埋めすることも可能です。ちょっとテクニック使いたかった感のあるソースに見られる方法です。
Private Sub cmdPadding_Click(sender As Object, e As EventArgs) Handles cmdPadding.Click Dim intNum As Integer Try intNum = Integer.Parse(txtPadNum.Text) txtPadNum.Text = String.Format("{0:D10}", intNum) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
String.Formatを上記の様に使用すればゼロ埋めが可能です。
※テキストボックスのTextプロパティはString型なので、都合上、一度Integer型に変換しています。
- 第1引数:{パディング文字:D埋めたい桁数}
- 第2引数:対象の文字(数値型)
見かけたときに「ゼロ埋めしてるんだな」という知識を持っておけば大丈夫だと思います。
編集後記
基本的にPadLeftを使用してゼロ埋めすればいいと思いますが、開発プロジェクトのコーディング規約に沿って選択してください。コーディング規約が無いという場合はどれかに統一するのがベターかと。
例えばですが、もし、数値が入っているのがString型の変数であればPadLeftを使用し、Integer型等の数値型の変数であればToStringやString.Formatを使用するなど、数値が入ってる変数によって使い方を分けてもいいかもしれません(ただし、可読性やメンテナンスを考慮した場合、やはりどれかに統一するのが一番いいかも)。
参考サイト
.