Как добавить строку CSV в массив в PowerShell - PullRequest
0 голосов
/ 02 марта 2019

Я хочу импортировать CSV-файл.Возьмите первый ряд (с заголовками) и добавьте его в массив в powershell.$csv = Import-CSV "test.csv" $array = @()

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

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

Если это так, вот небольшая функция, которая может сделать это для вас:

function Get-CsvHeaders {
    # returns an array with the names of the headers in a csv file in the correct order
    [CmdletBinding(DefaultParameterSetName = 'ByDelimiter')]
    param(
        [Parameter(ValueFromPipeline = $true, Mandatory = $true, Position = 0)]
        [ValidateScript({Test-Path -Path $_ -PathType Leaf})]
        [string]$Path,

        [Parameter(Mandatory = $false)]
        [ValidateSet ('ASCII', 'BigEndianUnicode', 'Default', 'OEM', 'Unicode', 'UTF32', 'UTF7', 'UTF8')]
        [string]$Encoding = $null,

        [Parameter(Mandatory = $false, ParameterSetName = 'ByDelimiter')]
        [char]$Delimiter = ',',

        [Parameter(Mandatory = $false, ParameterSetName = 'ByCulture')]
        [switch]$UseCulture
    )
    $splatParams = @{ 'Path' = $Path }
    switch ($PSCmdlet.ParameterSetName) {
        'ByDelimiter' { $splatParams.Delimiter  = $Delimiter; break }
        'ByCulture'   { $splatParams.UseCulture = $true; break }
    }
    if ($Encoding)    { $splatParams.Encoding = $Encoding }

    $data = Import-Csv @splatParams -ErrorAction SilentlyContinue
    $data[0].PSObject.properties.name
}

Использование:

$headersArray = Get-CsvHeaders -Path 'test.csv'
0 голосов
/ 02 марта 2019

Нужно ли вам явное преобразование в массив, когда import-csv предоставляет вам хороший перечислимый массив System.Object экземпляров?

Когда вы используете import-csv , PowerShell прочитает строку заголовка и вернет вам массив пользовательских объектов.Каждый из этих объектов будет иметь свойства, соответствующие столбцу Header.

Пример test.csv

Id,FirstName
1,Name001
2,Name002

Результаты после import-csv

Вы можете выполнить итерацию по коллекции, как показано ниже

$csv = Import-CSV "test.csv"
foreach($item in $csv)
{
    $msg=("Id={0}  , Name={1}" -f $item.Id, $item.FirstName)
    Write-Host $msg
}
#Add the first item to your own array
$arrMy=@()
$arrMy+=$csv[0]
$arrMy

Вывод

Id=1  , Name=Name001
Id=2  , Name=Name002


Id FirstName
-- ---------
1  Name001  

MSDN

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/import-csv?view=powershell-6

Углубление - что на самом деле возвращает import-csv?

Возвращает массив с N объектами типа System.Management.Automation.PSCustomObject .Здесь N = нет строк в файле CSV.

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