【发布时间】:2011-03-30 22:00:28
【问题描述】:
我正在寻找一个脚本,不必在 PS 中但必须在 Windows 下运行,它可以转换如下所示的单列文本文件
abc
def
ghi
进入
'abc',
'def',
'ghi'
我目前正在使用 =concatenate 在 Excel 中进行此更改,但脚本会更好。
【问题讨论】:
标签: powershell csv
我正在寻找一个脚本,不必在 PS 中但必须在 Windows 下运行,它可以转换如下所示的单列文本文件
abc
def
ghi
进入
'abc',
'def',
'ghi'
我目前正在使用 =concatenate 在 Excel 中进行此更改,但脚本会更好。
【问题讨论】:
标签: powershell csv
使用可以使用正则表达式在开头和结尾插入字符。
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 :) (使用 {backtick} 是因为这里的格式不正确)
(gc c:\before.txt | % {"'"+$_+"'"} ) -join ",{backtick}n" | out-file c:\after.txt。需要括号来评估第一个管道(它返回字符串数组)。然后它与,``n 连接(其中{backtick}n 是新行,与其他语言中的\n 相同。结果通过管道传送到out-file . 测试 ``n` 测试
*,这也会中断。
你可以使用
(gc myfile | %{"'$_'"}) -join ',
'
或者,如果你喜欢逃避:
(gc myfile | %{"'$_'"}) -join ",`n"
这会将文件加载到字符串数组 (Get-Content) 中,然后通过将每个字符串放入单引号中来处理它。 (如果您也需要修剪空白,请使用 `"'$($_.Trim())'")。然后用逗号和换行符连接行(可以直接嵌入到字符串中)。
如果您的值可以包含单引号(需要转义),那么将其粘贴在那里也很简单:
(gc myfile | %{"'$($_.Trim() -replace "'","''")'"}) -join ",`n"
【讨论】: