0

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

firstname     ; lastname     ; age     ;  

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

所以字段是固定长度的,用空格填充,字段之间用分号填充。

我想这样:

firstname, lastname, age, 

(逗号和没有固定宽度)

我已经用正则表达式替换了逗号,但我还想修剪字符串的结尾。但我不知道该怎么做。

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

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

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

4

3 回答 3

1

我建议您用逗号替换每次出现的“空格;空格”(假设被替换的字符没有出现在有效值内),因此最终结果将如下所示:

firstname,lastname,age

保持如下所示不是一个好主意,因为现在您的一些标题(属性名称)以空格开头:

"firstname, lastname, age,"

试一试(处理文件副本):

(Get-Content .\Bestand.txt) | 
foreach {$_ -replace ' ; ',','} |
out-file .\Bestand.txt

现在可以很容易地使用Import-Csvcmdlet 导入和处理文件。

于 2013-07-02T15:01:27.117 回答
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
于 2013-07-02T17:47:10.807 回答
0

-replace运算符采用正则表达式,您可以使用它来删除所有前导和尾随空格:

Get-Content .\Bestand.txt | 
    Foreach-Object { $_ -replace ' *; *',',' } |
    Out-File .\Bestand.csv -Encoding OEM
于 2013-07-02T18:42:39.620 回答