PowerShell – CSV(导入/导出)删除我的引号

PowerShell – CSV(导入/导出)删除我的引号

我有一个制表符分隔的 CSV 文件(test.txt),其内容类似于以下内容(我的 CSV 没有标题):

12.33   Apple   Orange  "this is" great "to eat"
10.99   Pear    Lemon   "this" is an - "aquired taste"

我尝试了以下两种方法将数据导入数组:

$Headers = "price","item1","item2","desc"
[array]$arrCSVobjects = import-csv "test.txt" -Delimiter "`t" -Header $Headers

(或者)

$Headers = "price","item1","item2","desc"
[array]$arrCSVobjects = Get-Content -Path "test.txt " | Out-String | ConvertFrom-CSV -Delimiter "`t" -Header $Headers

无论我如何处理这个问题,PS 总是想从数组中的 DESC 元素中删除起始(前导)引号(最终得到的结果如下所示 - 与原始数据不一样):

price    item1    item2    desc
-----    -----    -----    ----
12.33    Apple    Orange   this is great "to eat"
10.99    Pear     Lemon    this is an - "aquired taste"

与原始数据相比,您会发现一些引号丢失了。我如何阻止(防止)PS 从这样的元素中删除引号?我需要导入 CSV,处理数据,然后将其导出回另一个 CSV。每次我在网上搜索答案时,我都会不断得到关于如何删除引号的结果,但我似乎找不到如何保留它们。我不想在导入或导出过程中删​​除引号。

提前致谢,

简体中文:

答案1

您的文件不是有效的 CSV。(好吧,没有官方标准,但有一个事实上一。)双引号在 CSV 中对于周围字段具有特殊含义。非“周围字段”必须以某种方式进行转义,通常使用双引号,如下所示:

12.33   Apple   Orange  """this is"" great ""to eat"""

您还必须用双引号将整个字段括起来,否则解析器会感到困惑。这就是为什么该字段以三个双引号开始和结束的原因。

如果您无法更改文件的格式,您可以通过按制表符拆分来自己解析它。当然,这只有在您能保证实际字段内没有任何制表符时才有效。制表符必须仅用作字段分隔符。

gc .\test.txt | 
    % { $f = $_ -split "`t"; [pscustomobject]@{price=$f[0];item1=$f[1];item2=$f[2];desc=$f[3]} }

输出:

price item1 item2  desc
----- ----- -----  ----
12.33 Apple Orange "this is" great "to eat"
10.99 Pear  Lemon  "this" is an - "aquired taste"

相关内容