Rak*_*kha 7 powershell import-csv
实际的CSV数据用";"分隔 , 像这样:
[2017-04-27 15:45:04] ;x;/x;Succes;
Run Code Online (Sandbox Code Playgroud)
您可以看到有一个"Terminaison"列,其中包含成功或失败信息.我的目标是在Gridview中显示文件的所有列.
我正在做 :
import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";"
Run Code Online (Sandbox Code Playgroud)
并获得包含适当数据的所有列的所需输出:
现在我的问题是:当我想在GridView中显示所有内容时,"terminaison"列全部为空?为什么?所有其他列都正确显示...:
import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";" | out-gridview
Run Code Online (Sandbox Code Playgroud)
我发现标题末尾的空格(csv文件的第一行)导致了这个...
Date;Trousse;Version;Demandeur;Action;Paramètres;Terminaison
Run Code Online (Sandbox Code Playgroud)
(在"Terminaison"之后那里有一个空白处)
如果我在记事本中编辑csv并删除该空白区域,宾果游戏,它的工作原理.但是这并不能解决我的问题,因为我不想事先编辑文件.什么是这个奇怪的限制,是否有解决方法?
编辑:
下面提供的答案很棒.我最终使用另一个选项,我发现值得添加的可能性:
$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
Run Code Online (Sandbox Code Playgroud)
正如我在评论中提到的,当一个属性的开头或结尾有空格或特殊字符时,会出现一个显示空白值的错误Out-GridView.我不知道修复空白错误,但你可以在从csv转换之前修复文件,如下所示:
(Get-Content "C:\X\Capsule\CapsulePoste.csv") -replace 'Terminaison ','Terminaison' |
ConvertFrom-CSV -Delimiter ";" |
Out-GridView
Run Code Online (Sandbox Code Playgroud)
注意:正如马特和马克所说,马克的答案更为普遍.这个快速修复使得假设Terminaison是要修复的标头,并且在文档中的其他位置找不到.
以下是导入 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
Run Code Online (Sandbox Code Playgroud)
这会迭代每个结果对象的属性,然后创建一个具有相同属性的新对象,但对每个对象的名称运行 .Trim() 方法以删除任何周围的空格。
这显然比在导入之前修复 CSV 文件效率低,但如果您无法确定标题行出现在 CSV 中的哪个位置(因为它并不总是第一个),那么这样做(通常)也可能很棘手。
当然,如果您只想解决这个特定场景,则另一个答案是最简单的。
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |