我有一个文件以这种格式包含很多行:
firstname ; lastname ; age ;
(它有点复杂,但基本上就是文件)
因此字段长度固定,用空格填充,字段之间用分号。
我希望如此:
firstname, lastname, age,
(逗号,没有固定宽度)
我用regexp替换了逗号但我想修剪字符串的结尾。但我不知道该怎么做。
以下是我的开始,但我无法在那里获得“.TrimEnd()”。我也想过尝试一个“-replace”(“”,“”),但是我无法将它集成到这个表达式中:
Get-Content .\Bestand.txt | %{$data= [regex]::split($_, ';'); [string]:: join(',', $data)}
我可以获得一些有关如何实现这一目标的信息吗?
答案 0 :(得分:1)
我建议你用逗号替换每个'space; space'(假设被替换的字符不出现在有效值中),所以最终结果如下:
firstname,lastname,age
保持以下内容不是一个好主意,因为现在你的一些标题(属性名称)以空格开头:
"firstname, lastname, age,"
尝试一下(处理文件的副本):
(Get-Content .\Bestand.txt) |
foreach {$_ -replace ' ; ',','} |
out-file .\Bestand.txt
现在可以使用Import-Csv
cmdlet导入和处理文件。
答案 1 :(得分:0)
由于你已经创建了一些CSV- ish ,我会一路走来并创建合适的CSV:
$cols = "firstname","lastname","age","rest"
Import-Csv "C:\input.txt" -Delimiter ";" -Header $cols | % {
foreach ($property in $_.PsObject.Properties) {
$property.Value = ([string]$property.Value).Trim()
}
$_
} | Export-Csv "C:\output.csv" -NoTypeInformation
答案 2 :(得分:0)
-replace
运算符采用正则表达式,您可以使用它来删除所有前导和尾随空格:
Get-Content .\Bestand.txt |
Foreach-Object { $_ -replace ' *; *',',' } |
Out-File .\Bestand.csv -Encoding OEM