将单列CSV文件转换为PowerShell脚本的内容

3
我正在寻找一个脚本,它不必是在PS中运行,但必须在Windows下运行,可以将下面这样的单列文本文件转换为其他格式。
abc
def
ghi

转换成

'abc',
'def',
'ghi'

我目前正在使用Excel中的=concatenate进行此更改,但使用脚本会更好。
3个回答

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 $_ }}

谢谢!有没有一种简单的方法来修剪值(删除前导/尾随空格)?如果没有,我可以应付。 - Sean

3

我的第一个想法与Chad已经写的类似,就是检查行号。因此我尝试了不同的解决方案。它并不十分完美,但我也发表一下:)

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

2
您可以使用",{反引号}n"进行连接,然后省略.split :) (在SO中使用{反引号}是因为格式不正确)。 - stej
你能简要解释一下它是如何工作的吗?我理解 Chad 的脚本,但不理解这个。 - Sean
@Sean,这个想法是:(gc c:\before.txt | % {"'"+$_+"'"} ) -join ",n" | out-file c:\after.txt。那里的括号是必要的,以评估第一个管道(它返回字符串数组)。然后用,\n连接它(其中*{backtick}n*表示*new line*,在其他语言中与\n相同)。最后结果被管道传输到*out-file*。测试``n 测试 - stej
嗨,stej。谢谢你的建议。我没有想到。 :) - Nicola Cossu
如果其中一个字符串包含 *,这也会出现错误。 - Joey
@Joey。显然,如果没有Stej的改进,我的脚本假定您使用一些您确定不在文本文件中的字符。 - Nicola Cossu

0

你可以直接使用

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

或者,如果你喜欢转义:

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

这将文件加载到字符串数组中(Get-Content),然后通过将每个字符串放入单引号中来处理每个字符串。 (如果您还需要修剪空格,请使用`"'$($_.Trim())'")。然后,这些行用逗号和换行符连接(可以直接嵌入到字符串中)。

如果您的值可能包含需要转义的单引号,则将其插入其中也很简单:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接