我正在尝试将多个数组导出到CSV文件。该数组包含一个字符串值列表,然后我必须将它们放入CSV文件的单独列中。
我使用了“哈希表”和“ PSCustomObject”,但是我不确定这是否是正确的方法。 我能做的最接近的就是检索一个数组,并使用“ Export-Csv”将数据放在一列中。
有没有办法将多个数组值放在单独的列中?
这项工作符合预期:
$RegexValueOne | ForEach-Object {[PSCustomObject] @{ColumnOne = $_}} Export-Csv c:\users\username\desktop\regexdata.csv
以下是我尝试导出多个数组以分隔CSV列的内容:
$ValueOne = $RegexValueOne | ForEach-Object {[PSCustomObject] @{ColumnOne = $_}}
$ValueTwo = $RegexValueTwo | ForEach-Object {[PSCustomObject] @{ColumnTwo = $_}}
$RegexData = [PSCustomObject]@{
RegexColumnOne = $ValueOne
RegexColumnTwo = $ValueTwo
}
$RegexData | Export-Csv c:\users\username\desktop\regexdata.csv
答案 0 :(得分:0)
如果我们假设$RegexValueOne
和$RegexValueTwo
是您的数组,则可以选择以下任意一种情况:
如果每个数组具有相同的行数,则可以在多个数组上同时遍历索引号。
0..($RegexValueOne.Count-1) | Foreach-Object {
[PSCustomObject]@{
RegexColumnOne = $RegexValueOne[$_]
RegexColumnTwo = $RegexValueTwo[$_]
}
} | Export-Csv -Path 'c:\users\username\desktop\regexdata.csv' -NoType
如果每个数组的行数不同,则需要确定要迭代的索引数。如果您未在严格模式下运行PowerShell,则此方法有效,因为自定义对象中不带索引的索引将为null。
$MaxIndex = [math]::Max($RegexValueOne.Count,$RegexValueTwo.Count)-1
0..$MaxIndex | Foreach-Object {
[PSCustomObject]@{ RegexColumnOne = $RegexValueOne[$_]
RegexColumnTwo = $RegexValueTwo[$_]
}
} | Export-Csv -Path 'c:\users\username\desktop\regexdata.csv' -NoType
如果每个数组的索引数量不确定,并且将引发空索引错误,则可以执行以下操作:
$MaxIndexes = ($RegexValueOne.Count-1),($RegexValueTwo.Count-1)
$MaxIndex = [math]::Max($MaxIndexes[0],$MaxIndexes[1])
0..$MaxIndex | Foreach-Object {
[PSCustomObject]@{
RegexColumnOne = if ($MaxIndexes[0] -ge $_) { $RegexValueOne[$_] } else { '' }
RegexColumnTwo = if ($MaxIndexes[1] -ge $_) { $RegexValueTwo[$_] } else { '' }
}
} | Export-Csv -Path 'c:\users\username\desktop\regexdata.csv' -NoType
说明:
由于数组是从0
开始索引的,因此可以使用语法$array[index]
访问单个元素。我们需要知道包含数据的最高索引号,这样我们才能有效地循环。
使用Foreach-Object,我们正在使用管道。当前管道项目为$_
。使用管道,可以使我们最佳地导出到csv。
范围operator(..
)是创建连续整数数组的一种简便方法。