2014年7月13日日曜日

[Powershell] ヒア文字列を分割し行ごとに処理できるようにする

Powershellでは複数行の長さの文字列をヒア文字列をして定義できます。
しかし、1行ずつ処理しようとしてもそのままではうまくいきませんでした。
Measure-Objectで調べたら1行の文字列として扱われている様です。


処理を行うためにはこれを分割し文字列の配列に変換する必要があります。
$HereString = $HereString -split "`n"
このようなコマンドで配列にすることができます。

サンプルスクリプト
# 
# ヒア文字列の行数を取得します。

# ヒア文字列を作成します。
# 改行も含めて12文字とカウントされます。

$HereString =@"
ほげほげ1
ほげほげ2
"@ 

""
"ヒア文字列に対してGetTypeメソッドを呼び出します。"
$HereString.GetType()
""
""
"ヒア文字列を1文字づつ呼び出します。"
""
$HereString[0]
$HereString[1]
$HereString[2]
$HereString[3]
$HereString[4]
$HereString[5]
$HereString[6]
$HereString[7]
$HereString[8]
$HereString[9]
$HereString[10]
$HereString[11]

""
"改行は3文字として扱われます。"
"どういう文字コードが当てられているかは分かりません。"
""
"ヒア文字列の行数(Measure-ObjectのCount)"
($HereString | Measure-Object).Count 
""
"ヒア文字列の長さ(Length)"
$HereString.Length
""
""
""
"【ヒア文字列の分割】"
"ヒア文字列を改行文字で分割し、元の変数に格納します。"
$HereString = $HereString -split "`n"
""
"分割したヒア文字列に対してGetTypeメソッドを呼び出します。"
$HereString.GetType()
""
""
"分割したヒア文字列を1行づつ呼び出します。"
"1文字ごとに取り出すことはできないようです。"
""
$HereString[0]
$HereString[1]
""
"分割したヒア文字列の行数(Measure-ObjectのCount)"
($HereString | Measure-Object).Count
""
"分割したヒア文字列の長さ(Length)"
$HereString.Length
  
  



実行すると以下のようになります。


ヒア文字列を1文字づつ呼び出します。















改行は3文字として扱われます。
どういう文字コードが当てられているかは分かりません。

ヒア文字列の行数(Measure-ObjectのCount)
1

ヒア文字列の長さ(Length)
12



【ヒア文字列の分割】
ヒア文字列を改行文字で分割し、元の変数に格納します。

分割したヒア文字列に対してGetTypeメソッドを呼び出します。
True     True     String[]                                 System.Array                                                                                                                                    


分割したヒア文字列を1行づつ呼び出します。
1文字ごとに取り出すことはできないようです。

ほげほげ1
ほげほげ2

分割したヒア文字列の行数(Measure-ObjectのCount)
2

分割したヒア文字列の長さ(Length)
2


0 件のコメント:

コメントを投稿