適材適所

システム屋のくらげが気ままに書いているブログです。PowerShellやVBAなどプログラミング系の話をメインに書いています。

MENU

【PowerShell】0埋めや桁揃えなどのパディングする

PowerShellで0埋めや桁揃えなどパディングする方法の紹介です。

連続した3桁の数字を生成したいときや、固定長のデータを作成したいときなどに役立つかも。

あとはスクレイピングするときに連続したページURLをGETするときなんかにも重宝します。

StringクラスのPadLeft/PadRight

一番直感的でわかりやすいのがこれです。

文字列はこのクラスになるので、必ずこのメソッドを持っています。

そのため、Get-Memberコマンドレットでその詳細を確認することができます。

早速Get-Memberコマンドレットで定義を確認してみましょう。

 
"1"|Get-Member|?{$_.name -match "Pad"}

結果

 TypeName: System.String

Name   MemberType Definition
----   ---------- ----------
PadLeft Method   string PadLeft(int totalWidth), string PadLeft(int totalWidth, char paddingChar)
PadRight Method   string PadRight(int totalWidth), string PadRight(int totalWidth, char paddingChar)

PadLeftとPadRightメソッドがあることが確認できました。

どちらも使い方は同じです。

では実際に使ってみましょう。

 
#3桁に揃える。"   1"と出力される
"1".PadLeft(3)

 
#0埋めして3桁に揃える。001と出力される
"1".PadLeft(3,'0')

PadLeft(int totalWidth)

合計の長さを指定することができます。

足りない桁数は空白でパディングされる点が特徴です。

 
#"  3"と出力される
"1".PadLeft(3)

PadLeft(int totalWidth, char paddingChar)

合計の長さだけでなく、パディングする文字を指定することができます。

 
#"001"と出力される
"1".PadLeft(3,'0')

PadLeftやPadRightの注意点

とても便利なPadLeft 、PadRight メソッドですが、これらはStringオブジェクトのメソッドになります。

数値をパディングする場合はそのままでは使用できません。一度ToStringメソッドなどで数値型からString型にキャストする必要があります。

 
#数値の場合Padとつくメソッドはない
1|gm|?{$_.name -match 'Pad'}

 
#ToStringメソッドを経由してあげる必要がある
(1).ToString()|gm|?{$_.name -match 'Pad'}

書式設定演算子(-f)

-f演算子は様々な書式設定を行うことができる便利な演算子です。

この機能をを使ってもパディングすることができます。

 
#001と出力される
'{0:000}' -f 1

 
#000001と出力される
'{0:000000}' -f 1

PadLeft、PadRightと比較すると、数値をそのまま扱える利点があります。

書式は次の通りです。

{パディングに使う文字:0で桁数を指定}

書式は.NETの共通書式なので、パディング以外にも様々な書式があります。ご興味のある方はぜひ調べてもらうといいかと思います。

Visual BasicのFormat組み込み関数

一風変わった方法として、Visual BasicのFormat組み込み関数を利用する方法があります。

PowerShellの他言語を容易に組み込める利点を生かした方法です。

VBAやVBScriptに慣れしたんだ人ならこの方法もありかもしれません。

定義を確認してみましょう。

 
Add-Type -AssemblyName "Microsoft.VisualBasic"
[Microsoft.VisualBasic.Strings]::Format
#static string Format(System.Object Expression, string Style)

実際に使ってみましょう。

 
#001と出力される
[Microsoft.VisualBasic.Strings]::Format(1,"000")

デメリットは、使用前にAdd-TypeコマンドレットでMicrosoft.VisualBasicのアセンブリを有効化しなくてはいけない点です。

しかし、可読性はいいので場面によって使い分けていけるとグッドですね。

終わりに

PowerShellで0埋めなどのパディングをする方法の紹介でした。

パディングを容易に扱えるようになると、整ったフォルダ名を容易に生成できたり、

連続した固定長のデータを生成できたりとできることが広がります。

様々な場面で役に立つパディングをぜひ、使いこなしてください。

ここまでお読みいただき、ありがとうございました。