【发布时间】:2022-01-27 18:38:32
【问题描述】:
对 PowerShell 相当陌生,在 csv 文件中的每个标题列的第一个可用行中附加数据时遇到了挑战。
我想将foreach 用于每一列的数据类型,这些数据类型将独立于另一列的数据。列标题为$headers = "Scope", "Drawing", "Submittal", "Database", "Estimate", "Sequence",带有foreach,用于定位它们的各个项目并将其附加到每列。当前发生的问题是,因为每个类别/列及其各自的foreach 都会将其添加到单独的行中,因为前一行已经从另一个类别/列的数据中附加了数据,从而创建了对角线附加数据。
为每个类别/列使用单独的foreach 的原因是,该类别正在为每个类别独立查找和过滤文件。
以下是 CSV 文件中发生的情况:
| Scope | Drawing | Submittal | Database | Estimate | Sequence |
| ------| ------- |---------- |--------- |--------- |--------- |
| DATA01| empty | empty | empty | empty | empty |
| empty | DATA11 | empty | empty | empty | empty |
| empty | empty | DATA21 | empty | empty | empty |
| empty | empty | empty | DATA31 | empty | empty |
| empty | empty | empty | empty | DATA41 | empty |
| empty | empty | empty | empty | empty | DATA51 |
这是 CSV 文件的预期结果:
| Scope | Drawing | Submittal | Database | Estimate | Sequence |
| ------| ------- |---------- |--------- |--------- |--------- |
| DATA01| DATA11 | DATA21 | DATA31 | DATA41 | DATA51 |
这是正在处理的部分代码:
# Creates the CSV if it does not already exist
$headers = "Scope", "Mechanical Drawing", "Controls Submittal", "Database", "Estimate", "Sequence of Operations"
$psObject = New-Object psobject
foreach($header in $headers)
{
Add-Member -InputObject $psobject -MemberType noteproperty -Name $header -Value ""
}
$psObject | Export-Csv $CsvFile -NoTypeInformation
foreach ($file in $ScopeList)
{
$hash=@{
"Scope" = $file.Fullname
}
$NewItem = New-Object PSObject -Property $hash
Export-Csv $CsvFile -inputobject $NewItem -append -Force
}
foreach ($file in $DrawingList)
{
$hash=@{
"Drawing" = $file.Fullname
}
$NewItem = New-Object PSObject -Property $hash
Export-Csv $CsvFile -inputobject $NewItem -append -Force
}
foreach ($file in $SubtmittalList)
{
$hash=@{
"Submittal" = $file.Fullname
}
$NewItem = New-Object PSObject -Property $hash
Export-Csv $CsvFile -inputobject $NewItem -append -Force
}
foreach ($file in $DatabaseList)
{
$hash=@{
"Database" = $file.Fullname
}
$NewItem = New-Object PSObject -Property $hash
Export-Csv $CsvFile -inputobject $NewItem -append -Force
}
foreach ($file in $EstimateList)
{
$hash=@{
"Estimate" = $file.Fullname
}
$NewItem = New-Object PSObject -Property $hash
Export-Csv $CsvFile -inputobject $NewItem -append -Force
}
foreach ($file in $SequenceList)
{
$hash=@{
"Sequence" = $file.Fullname
}
$NewItem = New-Object PSObject -Property $hash
Export-Csv $CsvFile -inputobject $NewItem -append -Force
}
使用的 PowerShell 版本是 5.1。 Windows 10 操作系统。
有人可以帮助我了解如何在不删除另一列现有数据行的情况下追加到同一行但不同的列上吗?这可以通过喷溅或查看每个变量${named}List 来完成吗?
【问题讨论】:
-
所有列表都对齐并且计数相同吗?例如。
$ScopeList中的第 N 项对应于$SequenceList等中的第 N 项。 -
@MathiasR.Jessen 这些列表不会相互对齐/对应,并且可能并不总是具有相同的计数。对于列表,计数可能为 0。但回到您的示例,
$ScopeList将独立于$SequenceList;两个列表都有自己的过滤条件和脚本正在寻找的文件扩展名类型。 -
所以它不是真正的 CSV?它更像是“6 个彼此相邻的堆叠列”-kinda 文件 :)
-
@MathiasR.Jessen 对,一个“6 列并排”类型的文件哈哈。最初脚本是在 .log 文件中输出列表,但考虑到未来的目标,输出到 CSV 有望允许以某种一致的表格/电子表格格式进行进一步的数据分析(NLP/K-clustering),这样会更容易抓取和分析。
标签: powershell csv append