2013-07-02 71 views
0

重新格式化我有一个文件cointaining很多线路的格式如下:CSV使用PowerShell

firstname  ; lastname  ; age  ; 

这是一个有点复杂,但是这基本上文件

所以这些字段是一个固定的长度,用空格填充并在字段之间用分号分隔。

我想有它,以便:

我与正则表达式替换逗号

firstname, lastname, age, 

(逗号和没有固定的宽度),但我想也修剪字符串的末尾。但我不知道该怎么做。

以下是我的开始,但我无法设法在那里获得“.TrimEnd()”。我也想尝试一个“-replace(”“”“),但我不能在此表达其整合:

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

我能就如何实现这一目标的一些信息

回答

0

-replace运营商需要一个正则表达式,你可以用它来删除所有领先和尾随空格:

Get-Content .\Bestand.txt | 
    Foreach-Object { $_ -replace ' *; *',',' } | 
    Out-File .\Bestand.csv -Encoding OEM 
+0

-replace还需要一个数组(或管道的输出)作为输入:'(cat。\ bestand.txt)-replace'*; *',','| Out-File。\ Bestand.csv - 编码OEM' –

+0

有一个任意数量的空间,所以这成为一种魅力。 – Brtrnd

1

我建议你更换的每次出现“空间;空间”用逗号(假设替换的字符不有效值内出现),所以最终的结果会是这样的:

firstname,lastname,age 

保持它像以下是不是一个好主意,因为现在一些标题(属性名称)以空格开始:

"firstname, lastname, age," 

这给一个尝试(在文件的副本的工作):

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

现在可以很容易地导入和处理与Import-Csv cmdlet中的文件。

+0

我会建议占空白的任意量在两侧的',',通过使用'$ _ -replace '\ S *; \ S *', ''' – latkin

+0

这也是有效的,我会使用+而不是* –

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