【问题标题】:Powershell Converting Tab Delimited CSV to Comma delimited CSV without QuotesPowershell将制表符分隔的CSV转换为不带引号的逗号分隔的CSV
【发布时间】:2020-11-24 13:09:23
【问题描述】:

我们从 COGNOS 外部系统的公用文件夹中获得 制表符分隔的 CSV。这无法通过 Dataloader CLI 上传到 Salesforce。

com.salesforce.dataloader.exception.DataAccessRowException:错误 读取第 0 行:数据列数(98)超过 标题中的列 (97)

但是,如果您在 MS Excel 中打开 csv,并将其另存为新的 CSV (UTF-8),然后将其传递给数据加载器 CLI,则它可以正常工作。

EXCEL 转换文件的区别似乎是逗号分隔而不是制表符。

然后我尝试使用以下命令将原始制表符分隔的 CSV 转换为逗号分隔的 CSV,

import-csv source.csv -delimiter "`t" | export-csv target.csv -notype

但是这个输出有引号,数据加载器现在与文件一起运行,但没有将任何内容导入 Salesforce,它似乎无法正确识别字段名称。

然后我尝试以下命令删除双引号,

import-csv source.csv -delimiter "`t" | export-csv target.csv -notype
(Get-Content target.csv) | Foreach-Object {$_ -replace '"', ''}|Out-File target.csv

但这导致 Index out of range 错误,不清楚。

为 Data Loader CLI 执行此转换的最佳方法是什么? 什么可以让这个转换和EXCEL的转换一样?

非常感谢任何建议、想法、帮助实现这一目标。

谢谢!

【问题讨论】:

  • 数据中是否包含逗号?
  • 最简单的方法是升级到powershell-7.0,然后使用(Import-Csv -Path '.\source.csv' -Delimiter '`t') | Export-Csv -Path '.\target.csv' -Encoding UTF8 -UseQuotes AsNeeded
  • @T-Me 数据中没有逗号。
  • 嗨@Compo,感谢您的建议。服务器只有5.1,我同意你的看法。无论如何我都会试一试。

标签: powershell double-quotes csv dataloader


【解决方案1】:

SalesForce 对 CSV 文件有严格的rules。此外,this page 上表示一次最多可以导入 50000 条记录。

这里的主要内容是文件必须是 UTF8 格式。 值周围的引号是必需的。

应该这样做(前提是您在 Csv 中的记录不超过 50000 条):

Import-Csv -Path 'source.csv' -Delimiter "`t" | Export-Csv -Path 'target.csv' -Encoding UTF8 -NoTypeInformation

(source.csv 是您从 COGNOS 收到的制表符分隔文件)

【讨论】:

  • 嗨@Theo,谢谢你的建议,我试过了。它现在向我抛出错误 csv.CSVFileReader readHeaderRow (CSVFileReader.java:274) - 从 CSV 文件获取标题行时出错。 com.sforce.async.CSVReader$CSVParseException:找到未转义的报价。带引号的值应该在 com.sforce.async.CSVReader.nextRecordLocal(CSVReader.java:234) 的引号内。但据我所见,标题行中似乎没有未转义的引号。
  • @PasanEeriyagama 您能否向我们展示 source.csv 文件的前 3 或 4 行(在记事本中打开并在问题中复制/粘贴,而不是在评论中)?当然,把个人数据变成假数据..
  • 顺便说一句,我发现this link 有同样的问题,但很遗憾没有得到答复。
  • @PasanEeriyagama 嗯 .. 似乎是 SalesForce 批量上传 csv 文件中的一个错误。您是否尝试过将记录导入为 XML?有一个示例文件here
  • @PasanEeriyagama 可能是 SalesForce csv 加载器不理解 UTF8 ByteOrderMark 吗?如果您有 PowerShell 7,Export-Csv 支持 utf8NoBOM 的值 Encoding 参数。否则,您可以尝试切断文件的前三个字节。 (您可以使用Notepad++ 进行测试。
猜你喜欢
  • 1970-01-01
  • 2018-04-02
  • 2021-07-21
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
相关资源
最近更新 更多