雪ん子パースペクティヴ

読むとちょっとタメになるエントリー。コメントあると嬉しいです。

【Powershell】タブ区切りのテキストを取り出し、項目ごとに出力する。

Excelの表をメモ帳にコピーすると、規則性のある区切りになるよ。

 

はろー、yukiです。

 

テキストは、半角スペースで区切られることもままありますが、多くはタブ区切りになっていると思います。

タブ区切りされたテキストを別の形に出力する。その作業を手でするのは手間なので、スクリプトで実施しましょう。

 

今回の流れは下記です。

ーーーーーーーーーー

  1. 対象のテキストを読み込む。
  2. 項目別に分ける。
  3. 別の形に出力する。

ーーーーーーーーーー

 

タブ区切りのテキストは、次のものを想定しています。

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歳 + の + 女 + です。

 

 

 

出力の仕方により、様々な用途に使えそうです。

コマンドを使って何かファイルを作る時に有用です。

例えば、ショートカットとか良いです。

 

 

以上。

 

 

Googleアドセンス