Out-GridView 显示一个空白列,其中有实际数据
Out-GridView is showing a blank column where there is actual data
我有这个 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
我发现 header(csv 文件的第一行)末尾的空白 space 导致了这个...
Date;Trousse;Version;Demandeur;Action;Paramètres;Terminaison
("Terminaison"后面有一个空格space)
如果我在记事本中编辑 csv 并删除空白 space,宾果游戏,就可以了。但是,这并不能解决我的问题,因为我不想编辑文件 before-hand。这个奇怪的限制是什么,有解决方法吗?
编辑:
下面提供的答案很棒。我最终使用了另一个我认为值得增加可能性的选项:
$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
正如我在评论中提到的,当 属性 的开头或结尾有 space 或特殊字符时,bug in Out-GridView
会显示空白值。我不知道白色 space 错误的修复程序,但您可以在从 csv 转换之前修复文件,如下所示:
(Get-Content "C:\X\Capsule\CapsulePoste.csv") -replace 'Terminaison ','Terminaison' |
ConvertFrom-CSV -Delimiter ";" |
Out-GridView
注意:正如马特和马克所说,马克的回答更为笼统。此快速修复假设 Terminaison
是要修复的 header,并且在文档的其他地方找不到。
以下是导入 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
这遍历每个结果 object 的属性,然后创建一个具有相同属性但使用 .Trim() 方法的新 object 运行 在每个名称上删除任何周围的空格。
这显然比在导入之前修复 CSV 文件效率低,但如果您不能确定标题行出现在 CSV 中的什么位置(因为它并不总是第一个)。
当然,如果你只是想解决这个特定的问题,其他答案是最简单的。
我有这个 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
我发现 header(csv 文件的第一行)末尾的空白 space 导致了这个...
Date;Trousse;Version;Demandeur;Action;Paramètres;Terminaison
("Terminaison"后面有一个空格space)
如果我在记事本中编辑 csv 并删除空白 space,宾果游戏,就可以了。但是,这并不能解决我的问题,因为我不想编辑文件 before-hand。这个奇怪的限制是什么,有解决方法吗?
编辑:
下面提供的答案很棒。我最终使用了另一个我认为值得增加可能性的选项:
$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
正如我在评论中提到的,当 属性 的开头或结尾有 space 或特殊字符时,bug in Out-GridView
会显示空白值。我不知道白色 space 错误的修复程序,但您可以在从 csv 转换之前修复文件,如下所示:
(Get-Content "C:\X\Capsule\CapsulePoste.csv") -replace 'Terminaison ','Terminaison' |
ConvertFrom-CSV -Delimiter ";" |
Out-GridView
注意:正如马特和马克所说,马克的回答更为笼统。此快速修复假设 Terminaison
是要修复的 header,并且在文档的其他地方找不到。
以下是导入 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
这遍历每个结果 object 的属性,然后创建一个具有相同属性但使用 .Trim() 方法的新 object 运行 在每个名称上删除任何周围的空格。
这显然比在导入之前修复 CSV 文件效率低,但如果您不能确定标题行出现在 CSV 中的什么位置(因为它并不总是第一个)。
当然,如果你只是想解决这个特定的问题,其他答案是最简单的。