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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#导入csv文件,数据中有逗号怎么处理相关的知识,希望对你有一定的参考价值。

    在小批量数据导入的时候,最常用的就是使用excel工具,将数据保存为xls或csv文件,然后上传到服务器,然后读取出来通过数据库访问类的相关方法更新到数据库中。对于如何读取xls文件的方法,网上太多了,使用excel对象或ole db/odbc连接都行。对于csv文件,其中有一种方式就是通过文件流,将它作为文本读取出来,这其中会遇到一点小意外。
我们知道,使用excel工具保存成csv文件时有几个规则:
1、每一行的单元格内容之间用逗号分隔。
2、如果单元格的内容本身有逗号,这个单元格的内容将会用引号包含。
3、如果单元格的内容本身有引号,引号不在首或尾,这个单元格内容不会被引号包含。引号在首或尾,这个单元格内容会被引号包含且原来首尾的引号会被转义。
所以对于这样的内容,直接按逗号或引号使用split方法明显不合适,需要预先处理一下。办法很多,最容易想到的就是用正则过滤掉本身带逗号或引号的内容,剩下的再按逗号split就方便了,我将csv文件中的每一行获取出来存放到一个键值对的集合中,为了保证前后顺序一致,使用SortedList。
参考技术A 现在要读取一个CSV文件,将内容读取后用excel的格式输出,
读取的时候使用StringTokenizer类,用逗号将CSV的数据用逗号一个个分割,
csv的格式是这样的(值与值之间用半角逗号分隔):
"aaa","bbb","ccc","ddd","eee";
像这样的情况是没有问题的;
但是当数据中也有半角逗号时,例如:
"aaa,fff","bbb,ggg"
读取的时候就会出现字符被分割为"aaa(第一个字符),fff"(第二个字符)
一个字符被分割为两个了,而且都只有一个双引号,这会造成数据的混乱,

有没有朋友知道怎么处理的?
可以先把类似"aaa,fff"中的逗号先用一个特殊的字符串替换掉(根据逗号的上一个字符和下一个字符不是 " 做为条件过滤),再处理,最后在替换回来
参考技术B 参考 https://blog.csdn.net/hancluo/article/details/86590732
亲测可行

//需要先添加Microsoft.VisualBasic的引用
using Microsoft.VisualBasic.FileIO;
namespace ConsoleApp1

class Program

static void Main(string[] args)

using (TextFieldParser parser = new TextFieldParser(@"c:\temp\test.csv"))

parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)

//Processing row
string[] fields = parser.ReadFields();
foreach (string field in fields)

//TODO: Process field






参考技术C 1、将所有分隔符替换为软回车: 点击菜单:编辑→替换 在查找内容内输入分隔符 (如“,”等) 在替换处输入软回车符:按Alt键别放,依次输入小键盘上的数字键1和0,松开Alt键(此时在输入位置看不出变化,但内容已输入)。 进行全部替换 2、点设置单元格格式-对齐-自动换行 参考技术D 可以过滤的,编程过滤一下

以上是关于C#导入csv文件,数据中有逗号怎么处理的主要内容,如果未能解决你的问题,请参考以下文章

hive导入csv文件,字段中双引号内有逗号

python中怎么处理csv文件

导入 CSV 文件时处理逗号和撇号

C#获取CSV文件内容对逗号和引号分隔的处理

使用 C# 在 XML 文件中转换 CSV

excel另存为csv打开后有大量逗号是怎么回事?