最近、powershell の勉強をしている。勉強した内容をここに少しずつメモしていく。
今回は、powershell でファイルを一行ずつ読み込む方法について書く。調べたところ、幾つか書き方があるようだが、以下のように Get-Content コマンドレットを使う方法が自分的にはしっくり来た。
$inputFile = $Args[0] # 入力ファイルが UTF-8 でエンコードされているとする。この場合、以下のように「-Encoding UTF8」を付ける。 foreach ($line in Get-Content -Encoding UTF8 $inputFile) { $items = $line.split("`t") # タブで分割 $item0 = $items[0] # タブで分割した一つ目を取得 $item1 = $items[1] # タブで分割した一つ目を取得 Write-Output "First item: $item0, second item $item1" }
ただファイルを一行ずつ読み込んでいくだけでは面白くないので、例として、上記のように読み込んだ行をタブで分割してみた。
幾つかネット上でサンプルコードを読んでみたところ、powershell は、これまでにやってきた perl などのスクリプト言語と書き方が似ているので、使いこなせるようになるまでそんなに苦労しないと思っている (思いたい・・)。
2020/02/23 追記
読み込んだファイルに、分割文字のタブが複数あった場合、
$items = $line.split("`t+")
で行けるかと思ったが、これでは意図通り分割されなかった。
意図通りというのは、
aaa[tab][tab]bbb
が「aaa」と「bbb」に分割されること。
いろいろ調べたところ、
$items = $line -split "`t+"
で意図通りに分割できた。なぜ、最初の方ではダメなのかは分かっていない。。