我正在寻找一个脚本,它不必是在PS中运行,但必须在Windows下运行,可以将下面这样的单列文本文件转换为其他格式。
我目前正在使用Excel中的=concatenate进行此更改,但使用脚本会更好。
abc
def
ghi
转换成
'abc',
'def',
'ghi'
我目前正在使用Excel中的=concatenate进行此更改,但使用脚本会更好。
abc
def
ghi
转换成
'abc',
'def',
'ghi'
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
.split
:) (在SO中使用{反引号}是因为格式不正确)。 - stej(gc c:\before.txt | % {"'"+$_+"'"} ) -join ",
n" | out-file c:\after.txt。那里的括号是必要的,以评估第一个管道(它返回字符串数组)。然后用
,\n连接它(其中*{backtick}n*表示*new line*,在其他语言中与
\n相同)。最后结果被管道传输到*out-file*。测试``n
测试 - stej*
,这也会出现错误。 - Joey你可以直接使用
(gc myfile | %{"'$_'"}) -join ',
'
或者,如果你喜欢转义:
(gc myfile | %{"'$_'"}) -join ",`n"
这将文件加载到字符串数组中(Get-Content
),然后通过将每个字符串放入单引号中来处理每个字符串。 (如果您还需要修剪空格,请使用`"'$($_.Trim())'")。然后,这些行用逗号和换行符连接(可以直接嵌入到字符串中)。
如果您的值可能包含需要转义的单引号,则将其插入其中也很简单:
(gc myfile | %{"'$($_.Trim() -replace "'","''")'"}) -join ",`n"