Отсутствует открытие после ключевого слова foreach - PullRequest
0 голосов
/ 07 июня 2019

У меня проблема с foreach петлей.Я пытаюсь распечатать строки, которых нет в файле.Фрагмент кода выдает ошибку в цикле foreach о том, что пропущено открытие '(' после foreach ключевого слова. Как преодолеть эту ошибку.

Строки для поиска: 'nature', 'kite', 'venue',' street ',' venture 'в файле abc.txt.

У меня есть следующий фрагмент кода

$Pattern = @('nature|kite|venue|street|venture')
$Test = (Get-Content -Path .\file.txt | Select-String -Pattern $Pattern -AllMatches)
$Test = foreach {$_.matches.Value}
$t = $Pattern -split('\|')|where{$Test -notcontains $_}

Ответы [ 2 ]

1 голос
/ 07 июня 2019
$Test = (Get-Content -Path .\file.txt | Select-String -Pattern $Pattern -AllMatches) | foreach {$_.matches.Value}
foreach ($t in $Test) {
    $Pattern -split('\|')|where{$Test -notcontains $_}
}
0 голосов
/ 07 июня 2019

Я бы пошел другим путем:

  • с массивом строк,
  • создайте регулярное выражение, соединив их с |
  • Sort-Object -Unique из Select-String результатов

## Q:\Test\2019\06\07\SO_56488287.ps1
$strings = @('nature','kite','venue','street','venture')
$Pattern = [RegEx]($strings -join '|')
$file    = '.\file.txt'

$Found = (Get-Content -Path $file |
          Select-String -Pattern $Pattern -AllMatches
         ).Matches.Value | Sort-Object -Unique

$Missing = $Strings | Where {$Found -notcontains $_}

if($Missing){
    "Strings missing in $file"
    $Missing
} else {
    "All strings present in $file"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...