C#导入csv文件,数据中有逗号怎么处理

C#导入csv文件,数据中有逗号怎么处理,第1张

    在小批量数据导入的时候,最常用的就是使用excel工具,将数据保存为xls或csv文件,然后上传到服务器,然后读取出来通过数据库访问类的相关方法更新到数据库中。对于如何读取xls文件的方法,网上太多了,使用excel对象或ole db/odbc连接都行。对于csv文件,其中有一种方式就是通过文件流,将它作为文本读取出来,这其中会遇到一点小意外。

我们知道,使用excel工具保存成csv文件时有几个规则:

1、每一行的单元格内容之间用逗号分隔。

2、如果单元格的内容本身有逗号,这个单元格的内容将会用引号包含。

3、如果单元格的内容本身有引号,引号不在首或尾,这个单元格内容不会被引号包含。引号在首或尾,这个单元格内容会被引号包含且原来首尾的引号会被转义。

所以对于这样的内容,直接按逗号或引号使用split方法明显不合适,需要预先处理一下。办法很多,最容易想到的就是用正则过滤掉本身带逗号或引号的内容,剩下的再按逗号split就方便了,我将csv文件中的每一行获取出来存放到一个键值对的集合中,为了保证前后顺序一致,使用SortedList。

导入 *** 作

存在特殊字符情况的处理

Book1.csv

编号,名称,说明1,测试数据1,"测试CSV文件中,有逗号"2,测试数据2,"测试CSV文件中有""双引号"""3,测试数据3,"测试CSV文件中,有逗号和""双引号"""4,测试数据4,普通数据

mysql>CREATE TABLE Test_Book1 (

->id int,

->name VARCHAR(10),

->data VARCHAR(100)

->)

Query OK, 0 rows affected (0.05 sec)

下面的 lines terminated by '\r\n' 是 要求换行符号,为 windows的换行

下面的 ignore 1 lines是 忽略第一行的标题行。

mysql>LOAD DATA INFILE 'f:/Book1.csv'

->INTO TABLE Test_Book1

->FIELDS TERMINATED BY ','

->OPTIONALLY ENCLOSED BY '"'

->lines terminated by '\r\n'

->ignore 1 lines

->(id, name, data)

Query OK, 4 rows affected (0.00 sec)

Records: 4 Deleted: 0 Skipped: 0 Warnings: 0

mysql>select * from test_book1

+------+-----------+--------------------------------+

| id | name | data |

+------+-----------+--------------------------------+

| 1 | 测试数据1 | 测试CSV文件中,有逗号 |

| 2 | 测试数据2 | 测试CSV文件中有"双引号" |

| 3 | 测试数据3 | 测试CSV文件中,有逗号和"双引号" |

| 4 | 测试数据4 | 普通数据 |

+------+-----------+--------------------------------+

4 rows in set (0.00 sec)

CSV文件很难写,都是纯文本的,关键是位置不好查找与处理。实在要这样就用CFile将整个文件按字符串读出来,再查找到位置,插入需要填写的数据及格式。在将更新后的字符串使用CFile的写入,写入到文件中。

如果是C++,可以变化一下, *** 作EXCEL,对EXCEL *** 作VC++就有很多方式了,可以直接指定某个单元格填写数据及各式。最后将EXCEL文件另存为CSV格式就可以了。一样可以打开的。对编程来说简单多了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11596848.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存