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
}

 

こんな感じで、カンマ付き数字も、意図した値になってくれました

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.