【Powershell】タブ区切りのテキストを取り出し、項目ごとに出力する。
Excelの表をメモ帳にコピーすると、規則性のある区切りになるよ。
はろー、yukiです。
テキストは、半角スペースで区切られることもままありますが、多くはタブ区切りになっていると思います。
タブ区切りされたテキストを別の形に出力する。その作業を手でするのは手間なので、スクリプトで実施しましょう。
今回の流れは下記です。
ーーーーーーーーーー
- 対象のテキストを読み込む。
- 項目別に分ける。
- 別の形に出力する。
ーーーーーーーーーー
タブ区切りのテキストは、次のものを想定しています。
employee.txt
営業部 Aさん 26歳 男 技術部 Bさん 32歳 女
すぐに使いたい人は次のコードを使用してください。
$list = cat .\file\employee.txt $split = $list.split("`t") $dpt = @() $name = @() $age = @() $gender = @() for($i = 0; $i -lt $split.length; $i++) { if(($i % 4) -eq 0){ $dpt += $split[$i] }elseif(($i % 4) -eq 1){ $name += $split[$i] }elseif(($i % 4) -eq 2){ $age += $split[$i] }elseif(($i % 4) -eq 3){ $gender += $split[$i] } } for($j = 0; $j -lt $name.length; $j++) { Write-Host ($name[$j] + "は" + $dpt[$j] + "で、" + $age[$j] + "の" + $gender[$j] + "です。") }
それでは順番に見ていきましょう。
1. テキストの読み込み
catでemployee.txtの内容を読み込み、変数$listへ代入します。
変数$listには上記のファイル内容が入ります。
2. splitメソッドで区切る
タブ区切りのため、`tを使用します。`はバッククォートです。 正規表現になります。
区切ったテキストは変数$splitへ代入します。
変数$splitは一次元配列になっていますので、例えば、$split[0]は「営業部」が出力されます。
3. 項目ごとの変数を用意
powershellでの配列の定義は、@()を使用します。
4. 項目ごとの分類の繰り返し
$splitに代入された一つ一つの値を分類するため、$splitの長さだけ処理を繰り返します。
タブ区切りのテキストは、項目数が4個で、2セットあります。
つまり、4で割り切れる値が2つ、余り1が2つ、余り2が2つ、余り3が2つになります。
余剰演算子%を使用し、配列の変数を分類します。
cf.) 例えば、項目が5個あれば、配列の変数に余り4の値が生まれます。
分類したテキストは、各項目の配列に追記します。配列は+=で追記です。
5. 分類した値の出力
2セット分の値が各項目に代入されているので、項目の長さだけ繰り返します。
$name.lengthは2ですので、2回繰り返されます。
今回はWrite-Hostでコンソールへ出力しています。
下記が表示されます。
Aさんは営業部で、26歳の男です。 Bさんは技術部で、32歳の女です。
ちなみに、Write-Hostは()を使用しないと、+も標準文字として出力されてしまいます。
Aさん + は + 営業部 + で、 + 26歳 + の + 男 + です。 Bさん + は + 技術部 + で、 + 32歳 + の + 女 + です。
出力の仕方により、様々な用途に使えそうです。
コマンドを使って何かファイルを作る時に有用です。
例えば、ショートカットとか良いです。
以上。