2013-12-13 135 views
1

我想導入一個csv文件,並以管道分隔格式吐出列。Powershell傳遞字符串ForEach

Import-csv file.dat | foreach {($_.'Column1')+ "|" +($_.'Column2')+ "|" +($_.'Column3')} 

這個偉大的工程,當我明確地傳遞的列值

($_.'ColumnX' + "|" $_.'ColumnY') etc. 

我想傳遞的動態生成到的foreach組件變量的字符串。

我能夠產生「串」,它看起來完全作爲

"($_.'Column1')+ "|" +($_.'Column2')+ "|" +($_.'Column3')" 

然而,PowerShell是治療該生成的字符串作爲一個單一的柱和第一列僅輸出。

例如。

$columns = ($_.'Column1')+ "|" +($_.'Column2')+ "|" +($_.'Column3') 
Import-csv file.dat | foreach {$columns} 

任何建議如何獲得在foreach部分下傳遞的列字符串,以便我得到正確的輸出?

+0

你只是試圖將逗號轉換爲管道?爲什麼不使用'-replace'? –

回答

2

這是否適合您?

Import-csv file.dat | ConvertTo-Csv -Delimiter '|' -NoTypeInformation 
+0

這太好了。它絕對有效! 但是,我花了2天多的時間試圖找出如何獲得添加到foreach組的動態變量。我想知道如何將字符串作爲動態變量傳遞! – DataRiver

+0

你的意思是你想傳遞一個屬性名稱(列標題)的數組? – mjolinor

0

如果我理解正確,想讀取一個CSV(逗號分隔值)文件並將其輸出爲垂直條「|」分離的文件。如果是這樣的話,你可以做到以下幾點:

gc file.dat | % {[string]::join("|", $_.split(','))} 

這只是讀取行,它分爲領域,在每個逗號與豎線加入他們。

繼@雷神錘的回答您的評論,在這裏是如何在foreach塊內使用動態字段名:

$f1 = "ColumnA" 
$f2 = "ColumnB" 
import-csv file.dat | % {$_.$($f1) + "|" + $_.$($f1)} 

見我的回答here的說明。

+0

是的,這是計劃和@ mjolinor的解決方案也很好。但是,我很想了解如何將字符串作爲動態參數傳遞給foreach或其他任何東西。謝謝 – DataRiver

+0

'$()'告訴PS首先評估括號內的表達式。所以foreach塊變成'{$ _。ColumnA +「|」 + $ _。ColumnB}' – bouvierr