【问题标题】:PowerShell script to convert one-column CSV file用于转换一列 CSV 文件的 PowerShell 脚本
【发布时间】:2011-03-30 22:00:28
【问题描述】:

我正在寻找一个脚本,不必在 PS 中但必须在 Windows 下运行,它可以转换如下所示的单列文本文件

abc
def
ghi

进入

'abc',
'def',
'ghi'

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

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    使用可以使用正则表达式在开头和结尾插入字符。

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

    【讨论】:

    • 谢谢!有没有一种简单的方法来修剪值(删除前导/尾随空格)?如果没有,我可以凑合着。
    【解决方案2】:

    我的第一个想法与 Chad 已经写的类似,即检查行号。所以我尝试了不同的解决方案。不是很好,但我也发布了:)

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

    【讨论】:

    • 您可以使用 ",{backtick}n" 加入,然后省略 .split :) (使用 {backtick} 是因为这里的格式不正确)
    • 你能简单解释一下它是如何工作的吗?我了解乍得的剧本,但不是这个。
    • @Sean,这个想法是:(gc c:\before.txt | % {"'"+$_+"'"} ) -join ",{backtick}n" | out-file c:\after.txt。需要括号来评估第一个管道(它返回字符串数组)。然后它与,``n 连接(其中{backtick}n新行,与其他语言中的\n 相同。结果通过管道传送到out-file . 测试 ``n` 测试
    • 你好。感谢您的建议。我没有考虑。 :)
    • 如果其中一个字符串包含*,这也会中断。
    【解决方案3】:

    你可以使用

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

    或者,如果你喜欢逃避:

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

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

    如果您的值可以包含单引号(需要转义),那么将其粘贴在那里也很简单:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      相关资源
      最近更新 更多