Home >
Windows にまつわる e.t.c.
カンマ付き数字の引数を正しく認識させる
PowerShell は強力なのですが、強力すぎるのが時折アダになったりします
例えば、変数への代入や、関数(自作コマンドレット)の引数はパースされるので、「カンマ付き数字」を正しく認識できません
会計的なコマンドレットを作った場合、カンマ付き数字を引数に入力すると、複数の int
数値配列にパースされて解釈されてしまいます

ダブルクォーテーション等で囲んだカンマ付き数字を与えてやれば、カンマ付き数字の文字列として認識できますが、対話的に処理したい場合は面倒ですよね

カンマ付き数字のパース結果を意図した数値にする関数書いてみました
###################################################################
# 引数として渡された(パースされた)カンマ付き数字を Int にする
###################################################################
Function C2I([int[]]$Num){
$Count = $Num.Count
# 1つ目(カンマついていなかった場合も)
[string]$OutString = $Num[0].ToString()
# 2つ目以降
for( $i = 1; $i -lt $Count; $i++){
[string]$PartString = ""
# 3桁に揃えるためにリーディングゼロをセットする
[string]$PartDataString = $Num[$i].ToString()
$PartSize = $PartDataString.Length
for( $j = $PartSize; $j -lt 3; $j++){
$PartString += "0"
}
$PartString += $PartDataString
# 1つの文字列に繋げる
$OutString += $PartString
}
Return [int]$OutString
}
|
こんな感じで、カンマ付き数字も、意図した値になってくれました



Copyright © MURA
All rights reserved.