【问题标题】:Import-csv with different delimiters and quotes in powershell在 powershell 中使用不同的分隔符和引号导入 csv
【发布时间】:2012-08-30 06:32:15
【问题描述】:

我有一个 CSV 文件,它使用不同的引号和文本分隔符,而不是默认值。我知道分隔符有一个不同分隔符的选项,但我不知道如何去掉引号字符。

Import-Csv 'C:\test.txt' -Delimiter "(character U+0014 is used here, won't show here)"

但是引号字符是 U+00FE,我也需要删除它,这样我才能得到没有任何特殊字符的文本。我不想把它写到一个新文件中。我想将 csv 导入一个变量,以便对其进行一些分析。例如查看一个字段是否为空。

有什么想法吗?

【问题讨论】:

    标签: windows powershell csv


    【解决方案1】:

    分隔符实际上不是问题,因为您可以这样做

    -Delimiter "$([char]0x14)"
    

    至于引号,您可以使用预处理步骤,然后使用ConvertFrom- 而不是Import-CSV

    Get-Content test.txt |
        ForEach-Object { $_ -replace ([char]0xFE) } | # to remove the “quotes”
        ConvertFrom-CSV -Delimiter "$([char]0x14)"
    

    如果您的行包含嵌入的引号,那么它需要更多的工作,并且可能更容易强制引用每个字段:

    $14 = "$([char]0x14)"
    $_ -replace ([char]0xFE) -replace '"', '""' -replace "(?<=^|$14)|(?=`$|$14)", '"'
    

    【讨论】:

    • 只是一个小提示——这两行在与 Import-Csv 一起使用时是等效的(所以我也假设 ConvertFrom-Csv):-Delimiter "$([char]0x14)"-Delimiter 0x14 所以不需要使用更多复杂的形式。
    • @msorens:哦,很好。老实说,我实际上并没有测试它,但我知道字符串插值形式可以工作。显然因为 -Delimiter 需要 char PowerShell 会自动转换为正确的东西(如果它是字符串则不会)。
    猜你喜欢
    • 2015-09-24
    • 1970-01-01
    • 2015-07-13
    • 2020-11-24
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多