CSVHelper BadDataFound 在有效的 csv 中

2023-12-14

我们的客户开始报告从 CSV 文件导入数据时出现的错误。看到 csv 文件后,我们决定从自定义 CSV 解析器切换到 CSVHelper,但 CSV Helper 无法读取一些有效的 CSV 文件。

用户可以将任何 csv 文件加载到我们的应用程序中,因此我们不能使用任何类映射器。我们使用 csv.Parser.Read 来读取 string[] dataRows。我们无法更改此 csv 文件的生成方式,它是由另一家公司生成的,当此文件采用有效格式时,我们无法说服他们更改生成方式。

如果我们使用 BadDataFound 处理程序,则 context.RawRecord 为:

"1000084;SMRSTOVACI TRUBICE PBF 12,7/6,4 (1/2\") H;"

csv 文件中的数据行是:

1000084;SMRSTOVACI TRUBICE PBF 12,7/6,4 (1/2") H;;;ks;21,59;26,46;21.00;;;8591735015183;8591735015183;Technik;Kabelový spojovací materiál;Označování, smršťování, izolace;Bužírky, smršťovačky;

这应该是 RFC 4180 规定的有效 csv 文件。

代码是:

using (var reader = new StreamReader(filePath, Encoding.Default))
{
    using (var csv = new CsvReader(reader))
    {
        csv.Read();
        csv.ReadHeader();

        List<string> badRecord = new List<string>();
        csv.Configuration.BadDataFound = context => badRecord.Add(context.RawRecord);

        header = csv.Context.HeaderRecord.ToList();

        while (true)
        {
            var dataRow = csv.Parser.Read();
            if (dataRow == null)
            {
                break;
            }

            data.Add(dataRow);
        }
    }
}

您能帮我配置 CSVHelper 以便能够将此行加载到 string[] 吗?或者你能建议不同的解析来做到这一点吗?

谢谢


我相信是行中间的引用引起了问题。尝试将配置设置为忽略引号。

using (var reader = new StreamReader(filePath, Encoding.Default))
{
    using (var csv = new CsvReader(reader))
    {
        csv.Configuration.Delimiter = ";";
        csv.Configuration.IgnoreQuotes = true;

        csv.Read();
        csv.ReadHeader();

        List<string> badRecord = new List<string>();
        csv.Configuration.BadDataFound = context => badRecord.Add(context.RawRecord);

        header = csv.Context.HeaderRecord.ToList();

        while (true)
        {
            var dataRow = csv.Parser.Read();
            if (dataRow == null)
            {
                break;
            }

            data.Add(dataRow);
        }
    }
}

更新至版本 27.2.1

using (var reader = new StreamReader(filePath, Encoding.Default))
{
    List<string> badRecord = new List<string>();
    var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        Delimiter = ";",
        Mode = CsvMode.NoEscape,
        BadDataFound = context => badRecord.Add(context.RawRecord)
    };
    
    using (var csv = new CsvReader(reader, config))
    {
        csv.Read();
        csv.ReadHeader();

        header = csv.Context.Reader.HeaderRecord.ToList();

        while (csv.Parser.Read())
        {           
            data.Add(csv.Parser.Record);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSVHelper BadDataFound 在有效的 csv 中 的相关文章

随机推荐

  • 如何打破这个 while(true) 循环?

    您好 我试图打破这个循环 并在两个 if 语句都为 true 时返回坐标 然而 循环永远不会结束 我该如何修复它 public static String positionQuery int dim Scanner test in Scan
  • Lodash uniqBy更新最新值

    我有一系列如下所示的对象 id 27 unread message count 0 id 27 unread message count 7 我使用 lodash uniqBy 删除重复项 如下所示 uniqBy data id 它删除了重
  • iPhone iCloud 应用程序在 iOS 4 上编译时崩溃

    我想使用 iCloud 但是当我在 iOS 4 3 模拟器上编译该应用程序时 它崩溃了 dyld 找不到符号 OBJC CLASS NSMetadataQuery 我应该怎样做才能使其在 iOS 3 4 和 5 上运行 我的解决方案是 NS
  • 任意解引用指针的输出

    我将内存填充如下 char buf 8 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 然后将 unsigned long 指针依次放在前 5 个字节上并输出结果 char c ptr unsigned lo
  • 编译 .java 文件时无法找到符号错误

    再会 我在同一目录中有两个类 Map 和 Field 我成功编译了 Field java 但是当我编译 Map java 时 我得到了这个 Map java 4 error cannot find symbol private Field
  • jQuery 创建带有 ID 的新 div?

    我的 ASP NET masterPage master 中有表单 如果我单击 提交 它会通过 ajax 调用 masterPage master cs 文件中的某些方法 我在更新面板中有它 但我想用 jQuery 改进它 所以我有这个 s
  • 代码在不应该生效的时候生效了

    我有一个功能 如果用户单击按钮 它将在文本框中显示一个值 并在单击 btn 按钮后执行另一个功能的触发 function addwindow numberAnswer gridValues btn mainNumberAnswerTxt v
  • 在 BeautifulSoup 中用字典解析脚本标签

    正在研究部分答案this问题 我遇到了一个bs4 element Tag这是一堆嵌套的字典和列表 s 以下 有没有办法返回包含的网址列表s without using re find all 关于此标签结构的其他评论也很有帮助 from b
  • Flash 图像上传需要强制裁剪吗?

    有人知道 Flash 文件 图像 上传器会强制用户在上传之前调整图像大小和 或裁剪图像吗 然后也上传它 基本上 我不希望我的服务器处理图像调整大小 裁剪 我想指定目标纵横比 并让用户调整大小并裁剪图像以使其适合 我以前见过裁剪上传器 但它们
  • 通过C连接oracle DB

    我想在Windows操作系统中使用C语言连接oracle数据库 但我不知道如何开始 以及先决条件是什么 任何人都可以为我提供任何帮助 教程或示例代码吗 谢谢 http www dreamincode net forums topic 307
  • JavaFX:同时有 2 个独立窗口

    我想一次创建2个独立的窗口 一个窗口将能够保存可观察的列表 另一个窗口将显示所选列表对象的属性 我正在尝试将列表视图创建为通用列表 并将其与特定于对象的窗口 例如客户属性 啤酒属性 商店属性 结合起来 简而言之 如果用户单击 客户 它将显示
  • Worklight 和 jquery:我想要获取 xml 中存在的链接并使用行动态标记它们?

    上面附加了我的图像 该图像将其提取到远程服务器 其显示为内容页面中的行 我在同一个 xml 中有链接 我想将该链接标记为该行 然后单击它 用户应该加载页面 我怎样才能获取它 function displayFeeds items var u
  • 如何从文本文件中读取单词并将其添加到字符串数组中?

    这是我的函数 调用方式为 getWord words void getWord char words MAXWORDLENGTH int i char newWord MAXWORDLENGTH FILE file file fopen w
  • 如何使用 android 列出 ftp 目录?

    已解决 如何获取 ftp 服务器上的文件和文件夹列表 我知道如何连接和上传文件 但不知道如何获取目录列表 try FTPClient ftpClient new FTPClient ftpClient connect InetAddress
  • 如何检索cameraID并使用setTorchMode?

    Android M 最近问世了 它现在有一个内置的相机灯功能 称为 setTorchMode 我很好奇它是如何工作的 因为参数是 字符串cameraID 布尔值真 假 布尔值显然决定了灯是打开还是关闭 但是如何获取cameraID呢 我知道
  • 如何运行 JAR 文件

    我创建了一个像这样的 JAR 文件 jar cf Predit jar 我通过双击这个 JAR 文件来运行它 它不起作用 所以我从 DOS 提示符下运行它 如下所示 java jar Predit jar 它引发了 无法加载主类 异常 所以
  • ffmpeg:转换前后的视频长度不同

    我有一组 mov 视频 需要转换为 mp4 格式 我正在使用 ffmpeg 并运行以下命令 ffmpeg i Banking mov vsync async sameq ac 1 ab 64k ar 44100 Banking mp4 输入
  • 覆盖从 NPM @Types 下载的 V2.2.2 中的 TypeScript 类型

    我正在使用该组件反应路由器引导程序和定义来自绝对打字 我的问题是下载的定义与组件不匹配 我创建了一个拉取请求来解决这个问题 但由于我不知道什么时候会修补它 所以我必须覆盖它 我不能只编辑位于的类型定义文件node modules types
  • 使用 MySqlConnector for .NET 是否完全支持 TransactionScope 对象?

    我正在编写单元测试 技术上是集成测试 因为我正在连接到数据库 并且我想在测试内的事务中创建记录 并在测试完成后回滚所有数据库修改 我的想法是 我将通过一个 API 调用创建另一个 API 调用希望在数据库中找到的记录 我有以下有效的代码 s
  • CSVHelper BadDataFound 在有效的 csv 中

    我们的客户开始报告从 CSV 文件导入数据时出现的错误 看到 csv 文件后 我们决定从自定义 CSV 解析器切换到 CSVHelper 但 CSV Helper 无法读取一些有效的 CSV 文件 用户可以将任何 csv 文件加载到我们的应