Как заменить элементы из массива? - PullRequest
1 голос
/ 06 января 2012

Я новичок powershell, и у меня есть файл .csv, подобный этому:

Group1; User_A
Group1; User_B
Group2; User_A
Group2; User_D
Group2; User_C

Как я могу заменить элементы пробелами из первого столбца, чтобы я получил только первый элемент в группе:

Group1; User_A
      ; User_B
Group2; User_A
      ; User_D
      ; User_C

Я пробовал что-то вроде

$header = "Group", "User"
$adg = Import-Csv "C:\temp\users.csv" -Header $header -Delimiter ";" 
$adg | ForEach-Object  {$_ -replace "Group1", ""}

, но понятия не имею, как поступить

1 Ответ

2 голосов
/ 06 января 2012

Примерно так:

$csv = Import-Csv "Test.csv" -Header "Group", "User" -Delimiter ";" 

$lastGroup = ""
$csv | % {
    if ($lastGroup -eq $_.Group) {
        $_.Group = ""
    } else {
        $lastGroup = $_.Group
    }
}

$csv | ConvertTo-Csv -Delimiter ';' -NoTypeInformation

Вывод:

"Group";"User"
"Group1";"User_A"
"";"User_B"
"Group2";"User_A"
"";"User_D"
"";"User_C"

Обновление:

Просто для развлечения вот версиякоторый выводит нечто, похожее на ваш пример:

$csv = Import-Csv "C:\Documents and Settings\arisman1\Desktop\Test.csv" -Header "Group", "User" -Delimiter ";" 

$lastGroup = ""
$longestGroupName = $csv | select -Expand Group | Measure-Object -Property Length -Maximum

$csv | % {
    if ($lastGroup -eq $_.Group) {
        $_.Group = " " * $longestGroupName.Maximum
    } else {
        $lastGroup = $_.Group
    }
}

$csv | ConvertTo-Csv -Delimiter ';' -NoTypeInformation | % {$_ -replace '"', ''} | select -Skip 1

Вывод:

Group1;User_A
      ;User_B
Group2;User_A
      ;User_D
      ;User_C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...