2011-03-30 68 views
3

我正在尋找一個腳本,並不一定要在PS,但必須在Windows下運行,其將像下面PowerShell腳本轉換一列的CSV文件

abc 
def 
ghi 

一列文本文件到

'abc', 
'def', 
'ghi' 

我目前正在使用= concatenate在Excel中進行此更改,但腳本會更好。

回答

5

使用可以使用正則表達式在開始和結束處插入字符。

get-content ./myonlinecolumn.txt | foreach {$_ -replace "^","'" -replace "`$","',"} 

或者你可以使用格式運算符-f:

get-content ./myonlinecolumn.txt | foreach {"'{0}'," -f $_ } 

它更多的工作,以去除最後後面的逗號,但是這也可能

$a = get-content ./myonlinecolumn.txt 
get-content ./myonlinecolumn.txt | foreach { if ($_.readcount -lt $a.count) {"'{0}'," -f $_ } else {"'{0}'" -f $_ }} 
+0

謝謝!有沒有簡單的方法來修剪值(刪除前導/尾隨空白)?如果沒有,我可以做。 – Sean 2011-03-31 05:56:45

+0

您可以使用$ _。trim() – 2011-03-31 19:11:43

3

我最初的想法類似於Chad已經寫過的內容,那就是檢查行號。所以我嘗試了不同的解決方案。不是很漂亮,但我將它張貼太:)

((gc c:\before.txt | % {"'"+$_+"'"}) -join ",*").split("*") | out-file c:\after.txt 
+2

您可以加入「,{backtick} n」,然後省略'.split' :)(由於SO的格式不對,使用{反向}) – stej 2011-03-31 04:51:59

+0

解釋它是如何工作的?我理解乍得的劇本,但不是這一個。 – Sean 2011-03-31 05:41:45

+0

@Sean的想法是:'(gc c:\ 2008.txt |%{「'」+ $ _ +「'」})-join「,{backtick} n」| out-file c:\ after.txt'。需要用括號來評估第一個管道(它返回字符串數組)。然後它與',''n'(其中* {backtick} n *是*新行*,與其他語言中的'\ n'相同,並且結果被傳送到'out-file'。 n' test – stej 2011-03-31 06:33:06

0

你可以使用

(gc myfile | %{"'$_'"}) -join ', 
' 

,或者,如果你喜歡逃生:

(gc myfile | %{"'$_'"}) -join ",`n" 

這將加載文件到數組字符串(Get-Content),然後通過將其放入單引號中來處理每個字符串。 (如果你需要修剪空格,使用'''$($ _。Trim())'「)。然後用逗號和換行符連接這些行(可以將這些行直接嵌入到字符串中)。

如果你的值可以包含單引號(這需要進行轉義)是微不足道的堅持,在那裏,太:

(gc myfile | %{"'$($_.Trim() -replace "'","''")'"}) -join ",`n"