我要导入一个csv文件。取第一行(带有标题)并将其添加到powershell中的数组中。
$csv = Import-CSV "test.csv"
$array = @()
答案 0 :(得分:1)
当import-csv为您提供 System.Object 实例的不错的枚举数组时,您是否需要对数组的显式转换?
当您使用 import-csv 时,PowerShell将读取标题行并为您提供一系列自定义对象。每个对象都将具有与“标题”列匹配的属性。
test.csv示例
Id,FirstName
1,Name001
2,Name002
导入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
深入了解-import-csv实际返回什么?
它返回带有N个对象的数组,这些对象的类型为 System.Management.Automation.PSCustomObject 。这里N = CSV文件中没有行。
答案 1 :(得分:0)
我不太确定您在这里要问什么,但是在我看来,您希望将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'