用PowerShell重新格式化csv

时间:2013-07-02 14:49:16

标签: powershell

我有一个文件以这种格式包含很多行:

firstname     ; lastname     ; age     ;  

它有点复杂,但基本上就是文件

因此字段长度固定,用空格填充,字段之间用分号。

我希望如此:

firstname, lastname, age, 

(逗号,没有固定宽度)

我用regexp替换了逗号但我想修剪字符串的结尾。但我不知道该怎么做。

以下是我的开始,但我无法在那里获得“.TrimEnd()”。我也想过尝试一个“-replace”(“”,“”),但是我无法将它集成到这个表达式中:

Get-Content .\Bestand.txt | %{$data= [regex]::split($_, ';'); [string]:: join(',', $data)}

我可以获得一些有关如何实现这一目标的信息吗?

3 个答案:

答案 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