適材適所

PowerShellやVBAなどプログラミング系の話多めで

PowerShellでパディングする

PowerShellでパディングする方法の紹介です。

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

StringクラスのPadLeft/PadRight

一番手っ取り早いのがこれです。

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

PS C:\> "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)

実際に使ってみます。

PS C:\> #3桁に揃える
PS C:\> "1".PadLeft(3)
1
PS C:\> #0埋めして3桁に揃える
PS C:\> "1".PadLeft(3,'0')
001

定義を見てもらうとわかるようにPadLeft、PadRightともに2つのメソッドが定義がされています。

PadLeft(int totalWidth)

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

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

PS C:\> "1".PadLeft(3)
1

PadLeft(int totalWidth, char paddingChar)

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

PS C:\> "1".PadLeft(3,'0')
001

注意点

すごく便利なPadLeft 、PadRight メソッドですが、Stringオブジェクトのメソッドです。

そのため数値をパディングする場合はToStringメソッドなどで

一旦String型にしてあげる必要があります。

PS C:\>#数値の場合Padとつくメソッドはない
PS C:\> 1|gm|?{$_.name -match 'Pad'}
PS C:\>#ToStringメソッドを経由してあげる必要がある
PS C:\> (1).ToString()|gm|?{$_.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)

数値をパディングする場合はひと手間かかりますが、それでも簡単にパディングすることができます。

書式設定演算子(-f)

.NETでサポートされている演算子の一つ、-fは様々な書式設定を行うことができる便利な演算子です。

その-fの機能をを使うことでパディングすることができます。

PS C:\> '{0:000}' -f 1
001
PS C:\> '{0:000000}' -f 1
000001

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

Visual BasicのFormat組み込み関数

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

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

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

PS C:\> Add-Type -AssemblyName "Microsoft.VisualBasic"
PS C:\> [Microsoft.VisualBasic.Strings]::Format

OverloadDefinitions
-------------------
static string Format(System.Object Expression, string Style)
PS C:\> [Microsoft.VisualBasic.Strings]::Format(1,"000")
001

デメリットは、いちいちAdd-Typeコマンドレットで

Microsoft.VisualBasicのアセンブリを有効化しなくてはいけない点です。

こんな方法もあるよ、くらいの感覚で頭の片隅に置いておくと

何かの役に立つかも知れません。

終わりに

以上、PowerShellでパディングをする方法の紹介でした。

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

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

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

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