2013-07-02 72 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