我正在尋找一個腳本,並不一定要在PS,但必須在Windows下運行,其將像下面PowerShell腳本轉換一列的CSV文件
abc
def
ghi
一列文本文件到
'abc',
'def',
'ghi'
我目前正在使用= concatenate在Excel中進行此更改,但腳本會更好。
我正在尋找一個腳本,並不一定要在PS,但必須在Windows下運行,其將像下面PowerShell腳本轉換一列的CSV文件
abc
def
ghi
一列文本文件到
'abc',
'def',
'ghi'
我目前正在使用= concatenate在Excel中進行此更改,但腳本會更好。
使用可以使用正則表達式在開始和結束處插入字符。
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 $_ }}
我最初的想法類似於Chad已經寫過的內容,那就是檢查行號。所以我嘗試了不同的解決方案。不是很漂亮,但我將它張貼太:)
((gc c:\before.txt | % {"'"+$_+"'"}) -join ",*").split("*") | out-file c:\after.txt
您可以加入「,{backtick} n」,然後省略'.split' :)(由於SO的格式不對,使用{反向}) – stej 2011-03-31 04:51:59
解釋它是如何工作的?我理解乍得的劇本,但不是這一個。 – Sean 2011-03-31 05:41:45
@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
你可以使用
(gc myfile | %{"'$_'"}) -join ',
'
,或者,如果你喜歡逃生:
(gc myfile | %{"'$_'"}) -join ",`n"
這將加載文件到數組字符串(Get-Content
),然後通過將其放入單引號中來處理每個字符串。 (如果你需要修剪空格,使用'''$($ _。Trim())'「)。然後用逗號和換行符連接這些行(可以將這些行直接嵌入到字符串中)。
如果你的值可以包含單引號(這需要進行轉義)是微不足道的堅持,在那裏,太:
(gc myfile | %{"'$($_.Trim() -replace "'","''")'"}) -join ",`n"
謝謝!有沒有簡單的方法來修剪值(刪除前導/尾隨空白)?如果沒有,我可以做。 – Sean 2011-03-31 05:56:45
您可以使用$ _。trim() – 2011-03-31 19:11:43