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埋めなどのパディングをする方法の紹介でした。
パディングを容易に扱えるようになると、整ったフォルダ名を容易に生成できたり、連続した固定長のデータを生成できたりとできることが広がります。
様々な場面で役に立つパディングをぜひ、使いこなしてください。
ここまでお読みいただき、ありがとうございました。