将CSV文件导入c#

Cha*_*adT 2 c# csv asp.net

我正在建立一个网站,其中一个要求是用户从他们的电子邮件客户端导出他们的联系人以将其导入网站.

因为每个电子邮件客户端以稍微不同的格式导出他们的联系人,所以我的头脑不得不以最好的方式来接近它.因为我不知道这些字段是什么,或者分隔符是什么.

我只想找到主要的电子邮件客户端/地址簿(outlook,apple mail,entourage,thunderbird).所有这些都有完全不同的格式.Entourage使用tab作为分隔符,其余的使用逗号等.我只需要拔出电子邮件地址和(如果可用)名称.名称变得棘手,因为一些客户端具有名字/姓氏的单独字段.

使用FileHelper是理想的,但在我可以连接解决方​​案之前,我似乎需要知道csv的结构.如果可能的话,我宁愿不去编写我自己的csv解析器.

这是我对集体蜂巢思想的看法:

计划A.

  • 阅读csv文件的第一行(所有格式都有一个标题作为第一行)并计算标签与逗号的数量.由此确定分隔符.
  • 使用某种类型的csv阅读器(如Lumenworks)为我提供文件其余部分的基本csv读取功能.
  • 在每个字段上执行正则表达式匹配以确定电子邮件列.
  • 不知道如何找出用户的名字......

B计划

  • 提示用户输入电子邮件客户端的类型,并为每个不同的客户端单独编码< - 看起来真的很笨重.

计划C.

....使用/购买已经执行此操作的现有组件?!(我肯定找不到一个!)

思考?

Cer*_*rus 7

我会选择B计划(我不同意它是笨重的).

恕我直言,最好的方法是询问用户他/她需要从哪个电子邮件客户端导出.因此,您可以识别分隔符.你自己发现虽然不同的客户端使用不同的分隔符,但是单个客户端总是使用相同的分隔符(除非他们决定引出一个非向后兼容的版本)因此,创建一个面向对象的类应该不难接受分隔符作为参数,并相应地解析输入(逻辑应保持几乎相同,无论分隔符如何).

即使解析每种类型的导出文件的逻辑显着不同,似乎您可以创建一个抽象基类,其中包含所有常用功能和派生类,它们只是覆盖客户端特定的功能.

即使您使用FileHelpers等自定义库,您也应该能够通过传递分隔符的类型来完成它.

我觉得你不应该依赖可能的分隔符的相对计数来识别实际的分隔符是什么(如在计划A中).

编辑:刚想到的另一个选择是提供一种像MS Excel那样的选项界面.您可以选择分隔符,并根据选择实时预览数据的解析方式.

  • 计划B的+1不笨重.事实上,它是唯一可以做到这一点的故障保护方式.计划A失败的方式数量随着使用的文件格式数量呈指数级增长. (2认同)