技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

powershell でファイルを一行ずつ読み込む

最近、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+"

で意図通りに分割できた。なぜ、最初の方ではダメなのかは分かっていない。。