Как преобразовать данные из шаблона в строку - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь обрезать строки, расположенные внутри .csv, чтобы они содержали только те данные, которые мне нужны. Пример строки может быть «\ путь \ папка \ папка \ папка \ папка Владелец = Джон Доу».

Я просто хочу часть Доу Джона.

В настоящее время я импортирую список около 6000 из этих строк имеют строки, которые некоторые не имеют.

То, что я пытаюсь сделать так:

$owners = Import-Csv .\Owners.csv

ForEach($owner in $owners){
    if ($owner.Description -like "= *") {$owner.Description = "*"}
}

Это не похоже на работу. Можно ли сохранить подстановочный знак как переменную?

Ответы [ 2 ]

1 голос
/ 13 января 2020

Одним из методов будет использование регулярного выражения, а не подстановка с помощью подстановочных знаков.

$owners = Import-Csv .\Owners.csv

$output = foreach ($owner in $owners) {
    # The Description Property has an equal sign followed by a space
    if ($owner.Description -like '*= *') {
        # Use a regex then capture the the text after the equals and space, replace the property with that capture group.
        $owner.Description = $owner.Description -replace '.*=\s(.*)$', '$1'
        $owner
    }
}

$output | Export-Csv .\Owners.update.csv -NoTypeInformation
0 голосов
/ 13 января 2020

Вы можете сделать это с помощью регулярных выражений и сопоставить:

CSV:

Description
\path\folder\folder\folder\folder Owner = John Doe
\path\folder\folder\folder\folder Owner = Captain Black

Код:

$owners = Import-Csv .\Owners.csv

ForEach($owner in $owners){
    $match = $owner.Description -match "= .*"
    if ($match){
        $owner.Description = $matches[0] -replace "= ", ""
    }
    echo $owner
}

Вывод:

Description  
-----------  
John Doe     
Captain Black
...