Нежелательное пространство в подстроке с использованием powershell - PullRequest
0 голосов
/ 05 февраля 2020

Я довольно новичок в PS: я извлекаю поля из нескольких xml файлов ($ ABB). $net var основан на поиске по шаблону и возвращает подстроку non-stati c в строке 2. Вот что у меня есть:

    $ABB = If ($aa -eq $null ) {"nothing to see here"} else {
    $count = 0
    $files = @($aa)
      foreach ($f in $files)
      {
         $count += 1

         $mo=(Get-Content -Path $f )[8].Substring(51,2) 
         (Get-Content -Path $f | Select-string -Pattern $lf -Context 0,1) |  ForEach-Object {
         $net = $_.Context.PostContext
         $enet = $net -split "<comm:FieldValue>(\d*)</comm:FieldValue>"
         $enet = $enet.trim()}

         Write-Host "$mo-nti-$lf-$enet" "`r`n"

       }}

Вывод выглядит так: 03-nti- 260-8409. Обратите внимание на пробел перед 8409, который соответствует переменной $net. Я не смог решить это самостоятельно, мой подход мог быть совершенно неверным. Я открыт для любых предложений. Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Поскольку ваши первые символы в первой строке $net после $net = $_.Context.PostContext содержат разделенные символы, пустая строка будет выводиться в качестве первого элемента вывода. Затем при строковом выводе каждый разделенный выходной элемент объединяется одним пробелом.

Вам необходимо выбрать не пустые строки:

$enet = $net -split "<comm:FieldValue>(\d*)</comm:FieldValue>" -ne ''

Объяснение:

-Split символы, не окруженные (), удаляются из выходных данных, а оставшаяся строка разбивается на несколько элементов из каждого из этих совпадающих символов. Когда совпадающий символ начинает или заканчивает строку, выводится пустая строка. Необходимо соблюдать осторожность, чтобы удалить эти строки, если они не нужны. Trim() не будет работать, поскольку Trim() применяется к одной строке, а не к массиву, и не удаляет пустую строку.

Добавление -ne '' в конец команды удаляет пустые строки. Это просто встроенное логическое условие, которое при применении к массиву выводит только те элементы, для которых условие истинно.

Ниже приведен пример условия пустой строки:

123 -split 1

23

123 -split 1 -ne ''
23
0 голосов
/ 05 февраля 2020

Просто используйте -replace, чтобы избавиться от любых пробелов, например:

'03-nti-260- 8409' -replace '\s'
<#
# Results
03-nti-260-8409
#>
...