Powershell - добавление столбца CSV целесообразно - PullRequest
1 голос
/ 07 февраля 2020

У меня есть массив, и я хочу экспортировать его в CSV, и я использую приведенный ниже код.

[string[]] $Params = "Foo", "Bar"
$Params | out-file "D:\Output.csv" -Encoding ascii -Force -Append

#Output
Foo
Bar
Foo1
Bar1
Foo2
Bar2

Он добавляет CSV в строке, и я хочу его в столбце, как показано ниже,

Foo, Bar
Foo1, Bar1
Foo2, Bar2

Кто-нибудь, пожалуйста, помогите найти решение ...

Ответы [ 5 ]

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

Если все, что вы хотите в результате - это объединить 1-е значение в массиве со 2-м и т. Д., То простое значение для l oop будет выглядеть так:

[string[]] $Params = "Foo", "Bar","Foo1", "Bar1","Foo2", "Bar2"
$result = for ($i = 0; $i -lt $Params.Count -1; $i+=2 ) {
    # if any of the strings in the $Params array contains spaces 
    # or comma's I would strongly suggest quoting the output.
    '"{0}","{1}"' -f $Params[$i], $Params[$i+1]
}

# output on screen
$result

# output to CSV (no headers)
$result | Set-Content -Path 'D:\output.csv'

Вывод вышеупомянутого:

"Foo","Bar"
"Foo1","Bar1"
"Foo2","Bar2"
0 голосов
/ 07 февраля 2020
$params = "Foo", "Bar"
$params -join ', ' | Out-File C:\temp\test.csv

И затем использовать текст для фильтрации столбцов в, в Excel.

0 голосов
/ 07 февраля 2020

Вы можете написать файл csv вручную (я считаю, что это дает вам больше контроля в получении желаемого результата):

[string[]] $Params = "Foo", "Bar"
$fileStream = [System.IO.StreamWriter]::new("D:\Output.csv",1)
foreach($p in $Params){
    $fileStream.Write($p+",")
}
$fileStream.Write("`n")
$fileStream.Close()
0 голосов
/ 07 февраля 2020

Возьми это:

[string[]] $params = "Foo", "Bar"

$params -join ', ' | out-file "D:\Output.csv" -Encoding ascii -Force -Append
0 голосов
/ 07 февраля 2020

Вам нужно использовать ConvertTo-CSV, затем выводить в файл или ExportTo-Csv.

Чтобы это сработало, вы будете использовать его для коллекции объектов.

Вот случайно сгенерированный массив PSObject, который содержит свойства Foo и Bar. Как только у меня появится объект (вы бы вместо этого использовали свой), вам просто нужно поступить так, как я делал в последней строке.

Пример

$Array = for ($i = 0; $i -lt 10; $i++) {
    [PSCustomObject]@{
        Foo = "Meh-$(Get-Random -Minimum 0 -Maximum 20)"
        Bar = get-random
    }    
}

# The actual thing that matter
$Array | ConvertTo-Csv -NoTypeInformation | out-file "D:\Output.csv" -Encoding ascii -Force 

Случайный выходной CSV-результат

RandomCSVOutputResult

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