PS - 导入带引号的 CSV

问题描述 投票:0回答:1

我有一些文件需要导入到数据库中。文件大小为 30-40MB。 CSV 文件的分隔符是制表符。 例如:

标题1 标题2 标题3
1 兰德名称 5674
2 他的名字 663452
3 “她的名字 1423254
4 其他名称 876
5 我不知道 234
6 “”“为什么要使用它 2342

我试过这个:

$Import_file = Import-Csv "$($FileSource)" -Encoding Default -Delimiter "`t" -Header "Header1","Header2","Header3"

#Connection and table definition part

try {
    $Import_file | ForEach-Object {
        $row = $Import_Table.NewRow()
        $row.FIELD1 = [string]($_.Header1)
        $row.FIELD2 = [string]($_.Header2)
        $row.FIELD3 = [string]($_.Header3)
        $Import_Table.Rows.Add($row)
    }
}

问题出在引号上。它用作文本限定符。 第三行第二个字段的内容将是:“她的名字 1423254 4 其他名字 876 5 我不知道 234”

它不会保留引号。我怎样才能逃脱并保持队列?难道就不会放弃表演吗?

环境是Powershell 5.1 .

没有找到任何类型的参数来管理它。 尝试拆分行,但我担心性能会下降。

powershell powershell-5.1
1个回答
0
投票

如果可能,您应该尝试更改 CSV 的制作方式。

同时,虽然我打赌有一个补丁,但有无限更有效的方法来处理它:

$Import_File = Get-Content -Path .\res.csv | 
    ForEach-Object Replace '"' , '\"' |
    ConvertFrom-Csv -Delimiter "`t" |
    ForEach-Object {
        $temp = [pscustomobject]::new()
        foreach ($Header in $_.psobject.properties.name) {
            Add-Member -InputObject $temp -MemberType NoteProperty `
                -Name $Header -Value ($_.$Header -replace '\\"', '"')
        } 
        $temp
    }
© www.soinside.com 2019 - 2024. All rights reserved.