2010年6月29日火曜日

◆switchステートメント

構文はこんな感じ、(ごく普通)
PS>$text = "bbb"
PS>
PS>switch($text){
>>     aaa{"aaaが見つかりました";break}
>>     bbb{"bbbが見つかりました";break}
>>     ccc{"cccが見つかりました";break}
>>     {$_.length -eq 3}{"3桁の文字が見つかりました";break}
>>     default{"不明な文字が見つかりました"}
>> }
>>
bbbが見つかりました
ワイルドカードも使える。
PS>$text = "bbb"
PS>
PS>switch -wildcard ($text){
>>     aaa{"aaaが見つかりました";break}
>>     b*{"bbbが見つかりました";break}
>>     ccc{"cccが見つかりました";break}
>>     default{"不明な文字が見つかりました"}
>> }
>>
bbbが見つかりました

正規表現も使える。
PS>$text = "bbb"
PS>
PS>switch -regex ($text){
>>     aaa{"aaaが見つかりました";break}
>>     "bbb$"{"bbbが見つかりました";break}
>>     ccc{"cccが見つかりました";break}
>>     default{"不明な文字が見つかりました"}
>> }
>>
bbbが見つかりました
ファイルの中身を直接判定することもできる。
次の様な内容のファイルがあったとすると

bbb
ccc
ddd
aaaa

PS>
PS>switch -file test.txt{
>>     aaa{"aaaが見つかりました";break}
>>     bbb{"bbbが見つかりました";break}
>>     ccc{"cccが見つかりました";break}
>>     {$_.length -eq 3}{"3桁の文字が見つかりました";break}
>>     default{"不明な文字が見つかりました"}
>> }
>>
bbbが見つかりました

あれ、1行目しかヒットしない。
どうやら、breakはswitchステートメント全体をbreakしてしまうようだ。
ファイルの全行を判定するには、
PS>
PS>switch -file test.txt{
>>     aaa{"aaaが見つかりました";continue}
>>     bbb{"bbbが見つかりました";continue}
>>     ccc{"cccが見つかりました";continue}
>>     {$_.length -eq 3}{"3桁の文字が見つかりました";continue}
>>     default{"不明な文字が見つかりました"}
>> }
>>
bbbが見つかりました
cccが見つかりました
3桁の文字が見つかりました
不明な文字が見つかりました

breakとcontinueの使い分けについては、通常のループ処理と同じ感じ。
switchステートメント2

0 件のコメント:

コメントを投稿