编写和完善 CSV 解析器

2024-04-08

作为最近项目的一部分,我必须从 CSV 文件中读取和写入,然后将其放入 C# 中的网格视图中。最后决定使用现成的解析器来为我完成这项工作。

因为我喜欢做这类事情,所以我想知道如何自己写。

到目前为止,我所能做的就是:

//Read the header
            StreamReader reader = new StreamReader(dialog.FileName);
            string row = reader.ReadLine();
            string[] cells = row.Split(',');

            //Create the columns of the dataGridView
            for (int i = 0; i < cells.Count() - 1; i++)
            {
                DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
                column.Name = cells[i];
                column.HeaderText = cells[i];
                dataGridView1.Columns.Add(column);
            }

            //Display the contents of the file
            while (reader.Peek() != -1)
            {
                row = reader.ReadLine();
                cells = row.Split(',');
                dataGridView1.Rows.Add(cells);
            }

我的问题:像这样进行是一个明智的想法吗?如果是(或不是)我将如何正确测试它?


作为一项编程练习(用于学习和获得经验),这可能是一件非常合理的事情。对于生产代码,使用现有的库可能更好,主要是因为工作已经完成。 CSV 解析器需要解决很多问题。例如(随机地从我的头顶上掉下来):

  • 带引号的值(字符串)
  • 带引号的字符串中嵌入引号
  • 空值(NULL ...或者甚至可能是 NULL 与空)。
  • 条目数不正确的行
  • 有标题与无标题。
  • 识别不同的数据类型(例如不同的日期格式)。

但是,如果您在一个非常受控的环境中具有非常特定的输入格式,那么您可能不需要处理所有这些。

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

编写和完善 CSV 解析器 的相关文章

随机推荐

  • JavaScript 正则表达式文字在函数调用之间保持不变

    我有这段代码 function func1 text var pattern s S lt attrib if else if else end if search for end for s S gt g var result while
  • 如何将 actionPerformed( ActionEvent e ) 与多个按钮一起使用?

    所以我的作业要求创建一个顺序文件 我的教授给了我这个执行操作的简单代码 public void actionPerformed ActionEvent e FOR STATE AND COUNTRY String country Strin

  • 无法在 Windows 8 / 8.1 上运行

    Windows 8 8 1 最初问题出现在8中 所以我升级到8 1 但问题仍然存在 浏览器11 0 2 我正在使用一个名为 eTools 的产品 它用于生成和管理龙与地下城游戏的角色表 该信息存储在数据库文件中 但为了创建字符表 该软件使用
  • 关于JPA Cascade和删除实体的问题

    我的数据模型中有两个名为 User 和 UserProfile 的实体 以下是它们的映射方式 来自用户实体的代码 OneToOne cascade CascadeType ALL PrimaryKeyJoinColumn public Us
  • Angular DatePipe - 将秒转换为零时区的时间(12 而不是 00)

    我想使用 DatePipe 转换数字 代表秒 得到这样的结果 00 00 05 我尝试用 DatePipe 这样做
  • 读写锁。了解从readLock升级到writeLock

    考虑一下这个JDK标准接口 public interface ReadWriteLock public Lock readLock public Lock writeLock B Goetz 在 Java Concurrency inpra
  • 使用 PDO 选择多个数据库

    我有一个functions php有一个文件PDO我用来访问数据库的连接以及所有这些好东西就是这个 host localhost db maindatabase adminuser admin adminpw 123456 global c
  • 可以列出 zip / rar 文件内容的 PHP 库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • CMake - 找不到 Boost(缺少:序列化)(找到版本“1.73.0”

    我已经在我的项目中使用 Boost 一段时间了 但到目前为止 我只使用了仅包含头文件的库 我现在想使用序列化 但是当我尝试将序列化添加为必需组件时 我收到标题中写入的错误 这是我的 CMAKE 文件 cmake minimum requir
  • 将 pandas 数据帧保存到 csv 时如何保留 numpy 数组

    我有一个pandas DataFrame其中一列作为图像 该列的每一行都是一个二维图像numpy array 我保存了DataFrame to a csv文件与pandas DataFrame to csv 然而 当我打开csv文件中 该列
  • 每 2 秒进行一次 AJAX 后调用是不是一个坏主意?

    如果我对 php 文件进行 AJAX post 调用 使用 jQuery 来更新某个参数 数字 这是否被认为是不好的做法 危险或类似的做法 post file php var var function data something json
  • 仅获取联系人手机号码

    关于使用联系人 API 获取联系人号码有几个问题 但我想知道是否有一种方法可以识别检索到的号码是手机号码 以下代码通常显示为获取联系人电话号码的一种方式 因为它获取一个或多个电话号码的列表 String projection Contact
  • 如何将 Dto 修补到实体?

    我有一个接受 dto 对象的控制器 我需要更改 dto 对象中存在的字段 PatchMapping value update uuid public ResponseEntity
  • 更改一个对象中的值会更改另一个对象中的值

    我正在努力生成游戏树 我输入的问题是 当我将一个对象复制到新对象 然后在新对象中进行更改时 旧对象也会更改其值 所以这似乎是一个参考问题 但如何使新对象成为一个独立的实例 创建从父对象复制的子对象后 然后更改子对象中的值 父对象也会更改 并
  • 如何确保Tomcat6在Windows上读取CATALINA_OPTS?

    我有一个在 Windows2003 机器上运行的 Tomcat6 我在此服务器上部署了 2 个 Grails 应用程序 很快我就注意到部署后的某个时间一切都崩溃了 并出现了典型的 PermGen 错误 java lang OutOfMemo
  • JPA - COUNT 的最大值或从 SELECT 中选择

    我为 MySQL 编写了以下查询 SELECT subquery t1 column1 subquery t2 id MAX subquery val FROM SELECT t1 column1 as t1 column1 t1 id t
  • 如何在 C# 中使用循环迭代所有 ComboBoxes 控件?

    我在 C 的 winform 上有一些组合框 例如 10 名为 comboBox1 coboBox2 和comboBoxN 我如何在 for 循环中访问所有这些内容 如下所示 for int i 0 i lt 10 i comboBox i
  • 根据值列表重复每个元素

    是否有一个Python内置函数可以根据另一个列表中的相应值重复列表中的每个元素 例如A在列表中x由于值的原因 位置 0 重复了 2 次2位于列表中的位置 0y gt gt gt x A B C gt gt gt y 2 1 3 gt gt
  • 具有不等式条件的合并连接算法

    我读到 Oracle 支持带有不等式连接谓词的合并连接 是否有在线参考用于实现此类连接的算法 如果有人知道该怎么做 你能回答吗 This http docs oracle com cd E16655 01 server 121 e15858
  • 编写和完善 CSV 解析器

    作为最近项目的一部分 我必须从 CSV 文件中读取和写入 然后将其放入 C 中的网格视图中 最后决定使用现成的解析器来为我完成这项工作 因为我喜欢做这类事情 所以我想知道如何自己写 到目前为止 我所能做的就是 Read the header