2016-06-02 2 views
1

Я ищу способ (если возможно) найти любые хиты в любом столбце, содержащие «;» символ с запятой и вернуть имя столбца/поля.Поиск Powershell в колонке & имя столбца возврата

В основном я загружаю текстовый файл с разделителями DAT (или csv). Заголовки будут отличаться каждый раз, но я в основном пытаюсь выяснить, буду ли я ожидать, что любой из столбцов будет содержать значения с несколькими разделителями внутри столбца, такие как электронная почта CC или BCC.

Я использую форму с текстовым полем для ввода DAT/CSV.

$form.Topmost = $True 

$form.Add_Shown({$textBox.Select()}) 
$result = $form.ShowDialog() 

if ($result -eq [System.Windows.Forms.DialogResult]::OK) 
{ 
    $x = $textBox.Text 
    $x 
} 

Вот мой код для выходного файла:

Get-Content $x | 
    foreach {$_ -replace "þ", '"'} | 
    ConvertFrom-Csv -Delimiter "" | 
    Out-GridView 

я смог найти хит на всей CSV с помощью:

$FileContent = Get-Content $x 
$Matches = Select-String -InputObject $FileContent -Pattern ';' -AllMatches 
$Matches.Matches.Count 

выше часть делает давая мне общее число «;» хиты. Но я предпочел бы видеть, какие столбцы попали, мне не нужен общий счет, просто имя заголовка или номер столбца.

Я использую powershell ISE v5.

+1

'ipcsv $ x | % {$ _. PSObject.Properties} | ? Value -match ';' | % Name' – PetSerAl

ответ

0

Я бы использовал Select-String для поиска начальных ударов, которые были бы быстрее, чем цикл через каждый столбец и строку. Вы можете пройти через результаты путем преобразования каждой найденной строки в CSV, а затем в объект. Все, что вам нужно сделать, это цикл, но каждое свойство и вывод результатов. Что-то вроде этого:

$file = 'your_file.csv' 
$head = Get-Content $file -TotalCount 1 
$re = ';' 

Select-String $file -Pattern $re | % { 
    $line = $_ 
    $item = $head + "`n" + $_.line | ConvertFrom-Csv 
    $item | gm -MemberType NoteProperty | select -ExpandProperty Name | % { 
    if($item."$_" -match $re) { 
     New-Object psobject -property @{ 
     Column = $_ 
     Row = $line.Linenumber 
     Value = $item."$_" 
     } 
    } 
    } 
} 
Смежные вопросы