0

PowerShell の初心者で、誰かが次のことを手伝ってくれるかどうか疑問に思っています。基本的に、特殊文字 ($)(eg) で区切られた多数のレコードを含む .txt ドキュメントがあります。

ID
入力日
名前
役職
住所
電話
$
ID
入力日
名前
役職
住所
電話
$

$ の間の各項目を個々の「レコード」に分割して、各レコードをループできるようにします。たとえば、上記の各レコードをチェックして、電話番号が入力されていないすべてのレコードのレコード ID を返すことができます。

前もって感謝します

4

2 に答える 2

1

私はかつて同じ要件を持っていました...これが私がやった方法です

$loglocation = "C:\test\dump.txt"
$reportlocation = "C:\test\dump.csv"
$linedelimiter = ":"
$blockdelimiter = "FileSize"

$file = Get-Content $loglocation

$report = @()
$block = @{}

foreach ($line in $file)
{ 

    if($line.contains($linedelimiter))
        {
        $key = $line.substring(0,$line.indexof($linedelimiter)).trimend()
        $value = $line.substring($line.indexof($linedelimiter)+1).trimstart()

        $block.Add($key,$value)

        if ($block.keys -contains $blockdelimiter)
            {
            $obj = new-object psobject -property $block
            $report += $obj
            $block = @{}
            }
        }
}

$report
$report | Export-Csv $reportlocation -NoTypeInformation

したがって、各行を循環し、キーと値を定義して、オブジェクトをハッシュテーブルに追加します。キーにブロック区切り文字が含まれると、新しいオブジェクトが配列に書き込まれ、ハッシュテーブルがクリアされます。

私の場合、行区切り文字はコロンで、ブロック区切り文字は有効なレコードだったので、いくつか変更を加える必要があります。このアプローチがニーズに合っていて、何をすべきか分からない場合はお知らせください。

PS デフォルトでは、配列内の最初のオブジェクトの noteproperties のみが表示されるため、配列を Select-Object にパイプし、必要なすべてのプロパティを追加する必要があります。

よろしく。

于 2013-08-28T08:43:16.493 に答える