【问题标题】:Import data from CSV file with comma in string cells在字符串单元格中使用逗号从 CSV 文件导入数据
【发布时间】:2023-03-27 04:26:01
【问题描述】:

我想从 CSV 文件导入数据,但有些单元格在字符串值中包含逗号。如何识别哪个逗号用于分隔,哪个在单元格内容中?

【问题讨论】:

标签: c# csv


【解决方案1】:

使用 TextFieldParser :usage

using Microsoft.VisualBasic.FileIO; //Microsoft.VisualBasic.dll
...
using(var csvReader = new TextFieldParser(reader)){
    csvReader.SetDelimiters(new string[] {","});
    csvReader.HasFieldsEnclosedInQuotes = true;
    fields = csvReader.ReadFields();
}

【讨论】:

    【解决方案2】:

    一般来说,不要费心自己编写导入。

    我对 FileHelpers 库有很好的体验。 http://www.filehelpers.com/

    确实,我希望您的字段被引用。 Filehelpers 开箱即用地支持这一点。

    否则你无能为力。

    【讨论】:

      【解决方案3】:

      除非你在字符串周围有引号,否则你会非常紧张,因此使用“引号和逗号”分隔符样式。如果您可以控制导出工具,则必须选择“将字符串括起来引号”或将分隔符更改为波浪号或克拉符号之类的东西。

      如果不好,则必须编写一些代码。如果您检测到“a..z”,则开始计算逗号,然后继续处理字符串,直到检测到 [0..9],即使这样,这也会有问题,因为人们可以将 [0..9] 放在他们的文本。 最好,这将是一个尽力而为的过程。你必须知道什么时候你在字符中,什么时候你不会在字符中。我怀疑即使是正则表达式也会在这方面对你有很大帮助。

      我唯一能想到的另一件事是遍历数据并查找逗号。然后看逗号前后。如果您被字符包围,则将逗号替换为备用字符,例如克拉“^”符号或波浪号“~”。然后正常处理文件,然后返回并用逗号替换备用字符。

      祝你好运。

      【讨论】:

      • 一些包含“^”或“~”字符的字符串值呢?
      • 这里没有完美的解决方案。我发现波浪号在西方字符集中非常罕见,就书面英语而言,逗号更为普遍。现在,根据三元组指标,我的解决方案可能会出现问题,但是除了处理给定的数据之外,还需要做什么。
      【解决方案4】:

      使用 FileHelper 是明确的方式。他们在为您构建所有逻辑方面做得很好。我遇到了同样的问题,我必须解析一个包含逗号作为字段一部分的 CSV 文件。这个实用程序做得很好。您所要做的就是在字段上使用填充属性

          [FieldQuoted('"', QuoteMode.OptionalForBoth)]
      

      详情http://www.filehelpers.com/forums/viewtopic.php?f=12&t=391

      【讨论】:

        【解决方案5】:

        我们也可以像下面这样使用 RegEx。

        Regex CSVParser = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
        String[] Fields = CSVParser.Split(Test);
        

        【讨论】:

          猜你喜欢
          • 2013-12-02
          • 2014-04-25
          • 1970-01-01
          • 1970-01-01
          • 2019-12-26
          • 2020-03-17
          • 1970-01-01
          • 1970-01-01
          • 2011-03-29
          相关资源
          最近更新 更多