我有这个CSV文件。
实际的CSV数据用";“分隔,如下所示:
[2017-04-27 15:45:04] ;x;/x;Succes;您可以看到有一个列"Terminaison“,其中包含成功或失败信息。我的目标是在Gridview中显示文件的所有列。
我在做:
import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";"并获得包含适当数据的所有列的所需输出:
现在是我的问题:当我想在GridView中显示所有这些时,"terminaison“列都是空的?为什么?所有其他列都正确显示.:
import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";" | out-gridview我发现在标题的末尾( csv文件的第一行)有一个空格导致了这个.
Date;Trousse;Version;Demandeur;Action;Paramètres;Terminaison (在“终止”之后有一个空白)
如果我在记事本中编辑csv并删除空白,bingo,它可以工作。然而,这并不能解决我的问题,因为我不想编辑文件的手。这个奇怪的限制是什么?有解决办法吗?
编辑:
下面所提供的答案是很好的。最后,我使用了另一个选项,我认为这是值得增加的可能性:
$content = Get-Content C:\x\Journal\Capsule\CapsulePoste.csv
$content | Foreach {$_.TrimEnd()} | Set-Content C:\x\Journal\Capsule\CapsulePoste.csv
import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";"| sort-object Date -descending发布于 2018-01-09 15:27:05
在导入CSV之后,有一种修复它的通用方法:
$CSV = import-csv "C:\x\Capsule\CapsulePoste.csv" -Delimiter ";"
$FixedObject = $CSV | ForEach-Object {
$NewObject = New-Object -TypeName PSCustomObject
$_.PSObject.Properties | ForEach-Object { $NewObject | Add-Member -Name $_.Name.Trim() -Value $_.Value -MemberType $_.MemberType }
$NewObject
}
$FixedObject | Out-GridView这将遍历每个结果对象的属性,然后使用相同的属性创建一个新对象,但使用在每个对象名称上运行的.Trim()方法来删除任何周围的空白。
这显然比在导入之前修复CSV文件的效率要低,但是如果您不能确定在CSV中头行出现的位置(因为它并不总是第一个),那么这样做(一般情况下)也会很棘手。
当然,如果您只想修复这一特定场景,则另一个答案是最简单的。
发布于 2018-01-09 15:16:41
正如我在注释中提到的,在属性的开头或结尾有空格或特殊字符时,有一个Out-GridView显示空值。我不知道空格错误的修复程序,但是您可以在从csv转换之前修复文件,如下所示:
(Get-Content "C:\X\Capsule\CapsulePoste.csv") -replace 'Terminaison ','Terminaison' |
ConvertFrom-CSV -Delimiter ";" |
Out-GridView注:正如马特和马克所言,马克的回答更为笼统。这个快速修复假设Terminaison是要修复的头,并且在文档中找不到其他地方。
https://stackoverflow.com/questions/48171012
复制相似问题