適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話やポイ活など気になったことも載せているブログです。

【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埋めなどのパディングをする方法の紹介でした。

パディングを容易に扱えるようになると、整ったフォルダ名を容易に生成できたり、連続した固定長のデータを生成できたりとできることが広がります。

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

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