使用 CsvHelper 从单个 csv 文件读取多个类

2023-12-12

我最近一直在使用 Josh Close 的 CsvHelper 来解析 CSV 文件,我非常喜欢用于类映射的流利 api。

我正在尝试映射包含多种记录类型的 csv 文件,文件结构是

C,Comment,Timestamp
I,Class1,Header1,Header2
D,Class1,Data1,Data2
D,Class1,Data1,Data2
...
I,Class2,Header1,Header2,Header3
D,Class2,Data1,Data2,Data3
D,Class2,Data1,Data2,Data3
...
C,Checksum

这是 CsvHelper 可以处理的事情吗?我编写了一个自定义解析器,它基本上可以工作,但它真正做的只是过滤掉特定类的标题和数据字段 - 我真的很希望能够做类似的事情

csv.Configuration.RegisterClassMap<Class1>();
csv.Configuration.RegisterClassMap<Class2>();

var data1 = csv.GetRecords<Class1>().ToList();             
var data2 = csv.GetRecords<Class2>().ToList();

并一次性读取该文件?这是可能的还是我使用了错误的解析器?

问候 戴夫


有一种方法可以做到这一点;你只需要手动完成即可。

  1. 您手动逐行读取csv文件
  2. 检查第一列的鉴别器,该鉴别器将指示您需要映射到 Class 对象。
  3. 检查第二列以查找要映射到的类。
  4. 将整行映射到给定的类。

    public static void ReadMultiClassCsv()
    {
        var class1Data = new List<Class1>();
        var class2Data = new List<Class2>();
    
        using (StreamReader reader = File.OpenText(@"C:\filename.csv"))
        using (var csvReader = new CsvReader(reader))
        {
            //1.  You manually read the csv file row by row
            while (csvReader.Read())
            {
                var discriminator = csvReader.GetField<string>(0);
    
                //2.  Inspect the first column for the discriminator that will indicate that you need to map to a Class object.
                if (discriminator == "D")
                {
                    var classType = csvReader.GetField<string>(1);
    
                    //3.  Inspect the second column for the class to map to.
                    switch (classType)
                    {
                        //4.  Map the entire row to that given class.
                        case "Class1":
                            class1Data.Add(csvReader.GetRecord<Class1>());
                            break;
                        case "Class2":
                            class2Data.Add(csvReader.GetRecord<Class2>());
                            break;
                        default:
                            break;
                    }
                }
            }
        }
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CsvHelper 从单个 csv 文件读取多个类 的相关文章

  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • Perl 主机到 IP 解析

    我想将主机名解析为 IP 地址 使用以下 Socket 就可以了 ip gethostbyname host or die Can t resolve ip for host n ip inet ntoa inet aton host 这工
  • Gradle 相关任务不会将命令行选项传递给父任务

    我正在编写一个自定义 Gradle 任务 它接受来自命令行的选项 该部分按预期工作 导致我出现问题的是 调用依赖任务时 命令行选项被拒绝 因为它与依赖任务无关 这是演示该问题的示例 class CustomTask extends Defa
  • 将图标添加到自定义 WooCommerce 支付网关

    我想向我的支付网关添加自定义图标 我已阅读 WOO 网关 API 但获得的帮助为零 这是我下面的代码 请帮助我找到一种包含该图标的实用方法 以便我的前端有一个图标 谢谢
  • 在 Struts 2 中动态生成电子邮件模板

    场景是用户请假 当他请求休假时 系统会向审批者和用户发送一封电子邮件 其中包含有关休假的详细信息 我被困在这一点上 如何创建一个模板 该模板将根据请求休假的用户的名称自动更新 我看到了 asp net 应用程序 它是通过使用类似的东西在模板
  • 为什么Java中没有SortedList?

    在Java中有SortedSet and SortedMap接口 两者都属于Java集合框架并提供访问元素的排序方式 然而 据我了解 没有SortedList在爪哇 您可以使用java util Collections sort 对列表进行
  • 静态解析符号值时遇到错误。不支持函数调用。考虑替换函数或 lambda?

    尝试启动 npm 时出现错误 Error encountered resolving symbol values statically Function calls are not supported Consider replacing
  • 从进程获取实时输出

    我的项目有问题 我想启动一个进程 7z exe 控制台版本 我尝试了三种不同的方法 Process StandardOutput ReadToEnd 已接收输出数据 开始输出读取行 流写入器 什么都不起作用 它总是 等待 过程结束以显示我想
  • Ruby:无法在 Windows 上安装 Watir Gem

    瓦提尔的网站说我需要 Ruby 1 8 6 我正在运行它 Windows 安装应该像这样简单gem install watir 但是当我运行它时 我得到了这个 C Users Ryguy Code gt gem install watir
  • 在循环 R 中迭代时从函数返回值

    我已经远离了 R 中的函数 但认为这是更好的做法 现在我有这个问题 我写我的函数 myFunction lt function tab takes tabular input inP lt c for x in 1 dim tab 1 it
  • 增强 PowerShell 脚本以查询 AsBuiltReport 框架内 GPO 上的端口

    我得到了当前的脚本 来自这个答案 我想改进 如果在入站方向内启用并允许这些端口 则脚本应检索所需的端口 操作 启用 方向的过滤器工作完美 但我仍然需要本地端口的过滤器仅检索定义端口内的唯一结果 但仍显示其他端口 附加问题 如何将机器的 IP
  • 长按监听器 ListActivity 类

    我有一个使用 ListView 的应用程序 我设置了 onListItemClick 事件来查看有关联系人的详细信息 我想实现 onLongListItemClick 来显示一个对话框 但我不知道为什么它不起作用 我的意思是什么也没有发生
  • Visual Studio Code c++11 扩展警告

    我正在学习 C 并且正在使用 Mac 版 Visual Studio Code 我使用 Code Runner 来运行我的程序 我的问题是 当我使用 c 11 中的某些内容 如 auto 进行变量声明时 Visual Studio Code
  • 如何自定义UITabBarController的“更多”按钮?

    我将 UITabBarController 添加为 RootView 并且我还知道当您有超过 5 个 tabBarItem 时 会自动添加 更多 按钮 所以一切都很完美 但我有两个问题 1 如何在 更多 TabBarItem上设置图像 2
  • Mapbox GL JS 在图层中的特定功能上设置 Paint 属性

    我使用 Mapbox Studio 作为地图和样式的基础 然后使用 HTML 来实现其他地图功能 其中一项功能是在悬停或鼠标输入时更改图标不透明度 当您直接在 HTML 中创建它时 我检查了其他示例和所有其他参考功能 我设法改变不透明度 但
  • 队列不自然排序[重复]

    这个问题在这里已经有答案了 可能的重复 为什么java中的PriorityQueue会出现这种奇怪的顺序 请参阅下面的代码 public static void main String args Queue
  • 使用 MIPS 汇编中的逻辑移位乘以 2 的幂

    有人可以指导我如何在 MIPS 汇编中使用移位来制作乘法代码吗 我不明白数字 2 n 如何帮助我使用奇数被乘数进行乘法 我目前有这段代码 我正在尝试制作一个计算器 text li v0 4 la a0 ask 1 syscall li v0
  • 使用 PHP 抓取完整图像 src

    我正在尝试用 php 抓取 img src 我可以很好地获取 src 但是如果 src 不包含完整路径 那么我无法真正重用它 有没有办法使用php获取图像的完整路径 如果使用右键菜单 浏览器可以获取它 IE 如何获取包含以下两个示例之一中的
  • Django 开发服务器不断注销

    我在 settings py 中将 SESSION COOKIE AGE 设置为 360 但是在我开发服务器时它总是将我注销 为什么会发生这种情况以及如何防止这种情况 Thanks 这是我的设置 py 设置 py Django settin
  • 适用于 iPhone 的 MQTT 客户端

    我正在尝试遵循这个blog用于为 iPhone 构建推送服务 该博客使用 Android 作为工作平台 但它也可以迁移到 iPhone 前提是我在 Objective C 中获得了 MQTT 客户端 但我在任何地方都找不到 我最接近的是 我
  • 使用 CsvHelper 从单个 csv 文件读取多个类

    我最近一直在使用 Josh Close 的 CsvHelper 来解析 CSV 文件 我非常喜欢用于类映射的流利 api 我正在尝试映射包含多种记录类型的 csv 文件 文件结构是 C Comment Timestamp I Class1