【问题标题】:Import-Csv include empty fields in end of rowImport-Csv 在行尾包含空字段
【发布时间】:2017-01-06 12:33:16
【问题描述】:

编辑

我会得出结论,Import-Csv 不适合格式不正确的 CSV,并将使用 Get-Content 和拆分。谢谢大家的回答。

CSV 示例:

"SessionID","ObjectName","DatabaseName",,,,,,,,
"144","","AC"

使用Import-Csv 将不会计算末尾的任何空字段 - 它只会在“DatabaseName”之后停止。

有什么办法可以包含空字段?

编辑: 我只需要计算字段并确保它们的数量少于 X。不仅标题可能包含空字段,而且内容也可能包含。这些文件通常是手动制作的,格式不正确。由于文件也可能变得非常大,我不希望同时使用 Get-Content 和拆分,因为我已经在使用 Import-Csv 及其属性。

【问题讨论】:

  • 你会如何处理没有价值的无标题字段?
  • "...手动制作,格式不正确..." - 是你的根本问题。
  • import-csv 并非旨在帮助您处理格式不正确的 csv 文件。

标签: powershell import-csv


【解决方案1】:

看起来它缺少标题。如果你能添加一些,它会工作得很好。

你可以这样做

Get-Content My.CSV | Select -skip 1 | ConvertFrom-Csv -Header "SessionID","ObjectName","DatabaseName",'Whatnot1', 'Whatnot2', 'Whatnot3'

【讨论】:

  • 我正在使用它来验证我尚未创建的 CSV 文件,该文件还可以包含截然不同的标题名称。名称本身并不那么重要,但我必须确认字段的数量不超过一定数量 - 最后的空字段也必须算作字段。示例中的第一行是标题
  • 所以你需要计算第一行中的分隔符并完成?
  • 是与否,我还需要对每一行进行计数(可以是数十万)。我已经使用 Import-Csv 来访问属性,所以我想避免也使用 Get-Content 和拆分。
  • 如果它是格式正确的 csv,则不会有比标题更多的列。你的情况不是这样?
  • 不可以,因为文件既可以手工制作,也可以通过excel转成csv,可以生成非常有创意的格式。
【解决方案2】:

正如 dbso 建议的 split 和 Length 会帮助你。我正在编写一个现在已经过时的标头例程。不过这里是:

$FileIn = "Q:\test\2017-01\06\SO_41505840.csv"
$Header= (Get-Content $FileIn|select -first 1)-split(",")
"Fieldcount for $FileIn is $($Header.Length)"
for($i=0; $i -lt $Header.Length; $i++){if ($Header[$i] -eq ""){$Header[$i]="`"Column$($i+1)`""}}
$Header -Join(",")

返回这个输出

Fieldcount for Q:\test\2017-01\06\SO_41505840.csv is 11
"SessionID","ObjectName","DatabaseName","Column4","Column5","Column6","Column7","Column8","Column9","Column10","Column11"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2013-05-19
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多