PowerShell, как сопоставить текст в Datatable и заменить - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть dataTable, созданный и заполненный в PowerShell из SQL-запроса.

Мне нужно пройтись по каждой строке с данными, найти совпадение (пробел / пробел) и заменить его просто (/) (по запросу клиента)

Мне нужно заменить это совпадение для каждой строки.

Я провел бесчисленное количество поисков и попробовал следующее:

$dt | where {$_.l4 -cmatch " / "} | foreach {$_.l4 = "/"}

Но это заменяет все значение на просто (/)

Я пытался использовать replace, creplace и многие другие циклы ForEach, операторы IF и т. Д.,

Этопо сути то, что я пытаюсь сделать:

        #loop through the datatable and replace " / " with "/"
        foreach ($Row in $dt.Rows) {     
           if($Row -cmatch " - "){
                $Row -creplace " - ","/"
           }
        }

Пожалуйста, скажите мне, что я чего-то явно упускаю.

Я ценю вашу помощь и руководство, поскольку я расширяю свои знания PowerShell!

1 Ответ

1 голос
/ 19 сентября 2019

Вы в значительной степени получили его, но когда вы делаете -creplace, вам нужно присвоить это новое значение существующему значению этой строки в $ dt.Также нет необходимости проверять совпадение перед выполнением замены, так как -replace выполнит замену, только если обнаружит совпадение

Я предполагаю, что вы хотите выполнить замену в определенном столбце, как вВаш первый пример кода.Если это так, то это будет работать:

foreach ($Row in $dt) {

    $Columns = $Row | Get-Member -MemberType Property
    foreach ($Column in $Columns) {

        $Row.($Column.Name) = $Row.($Column.Name) -creplace " / ", "/"

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...