コンテンツへスキップ

【Powershell】Find の結果を加工して配列に入れる →CSV 出力する。

Find の結果を加工して配列に入れる →CSV 出力する。

エクセルに取り込んでうまく「データの区切り位置」などで分割できればいいけど、
うまくいかない場合なんかに、Find の結果をPowerShell で加工したい。

CSV 出力も、文中で「,」が使われている場合、勝手にそこでセル分割されてしまう為、
回避策として、「?」などのその他の記号を分割文字に指定してCSV(疑似CSV…?)出力したい。

Find の結果をForEach で処理しています。
メインの配列($all)を用意して、ForEach の中でも配列($array)を定義、データをいろいろと分割した後で
先に用にしたメインの配列($all)に順番に入れてます。

function test{
    $all=@()
    find /i '"ALIAS/"' *.inc | ForEach-Object {
        $array=@()
        try {
            $d='NO_COMMENT'
            $a=$_.Substring(0, 6);
            $b=$_.Substring(6,$_.IndexOf(',')-6);
            $c=$_.Substring($_.IndexOf(',')+1);
                if($c.IndexOf('$$') -gt 0){
                    $d=$c.Substring($c.IndexOf('$$'))
                    $c=$c.Substring(0,$c.IndexOf('$$'))
                    $c=$c.Trim()
                }
            $array += $a
            $array += $b
            $array += $c
            $array += $d
        }
        catch {
            <#Do this if a terminating exception happens#>
        }
        $all += $array -join "?"
        }
    $all
    $all | Out-File -FilePath "check.csv" -Encoding utf8
}

Find で検索する文字列を複数にしたい場合は、Findstr を使用するといいと思います。

findstr /i '"load cutcom"' .\op010.acl 

サブフォルダ内も検索するなら /s をつける。

findstr /i /s '"load cutcom"' .\op010.acl 

作成した疑似?CSV の取り込み手順は下記を参考にしてください。

エクセルで「テキストまたは CSV から」経由でデータを取り込むときに、カスタムの区切り記号を使うと最初のカラムしか取り込めない

以上です。

(Visited 10 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です