【问题标题】:Exporting data to a CSV file from multiple Arrays将数据从多个数组导出到 CSV 文件
【发布时间】:2020-07-15 19:31:32
【问题描述】:

我正在尝试将多个数组导出到 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 

【问题讨论】:

  • 每个数组的项数是否相同?

标签: arrays powershell csv


【解决方案1】:

如果我们假设 $RegexValueOne$RegexValueTwo 是您的数组,您可以选择以下任一场景:

如果每个数组的行数相同,则可以在多个数组上同时循环遍历索引号。

0..($RegexValueOne.Count-1) | Foreach-Object {
    [PSCustomObject]@{
        RegexColumnOne = $RegexValueOne[$_]
        RegexColumnTwo = $RegexValueTwo[$_]
    }
} | Export-Csv -Path 'c:\users\username\desktop\regexdata.csv' -NoType

如果每个数组的行数不同,则需要确定要迭代的索引数。如果您没有在严格模式下运行 PowerShell,则此方法有效,因为没有值的索引在自定义对象中将为空。

$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 (..) 是一种创建顺序整数数组的捷径。

【讨论】:

  • AdminOfThings - 感谢您非常详细地解释这一点,第三个示例成功了。
猜你喜欢
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2019-02-14
  • 1970-01-01
  • 2018-04-15
  • 2019-01-11
相关资源
最近更新 更多