将 CSV 文件导入 C#

2024-01-11

我正在构建一个网站,要求之一是用户从电子邮件客户端导出联系人,然后将其导入到网站中。

因为每个电子邮件客户端以稍微不同的格式导出他们的联系人,这让我摸不着头脑,必须找到处理它的最佳方法。因为我不知道字段是什么,也不知道分隔符是什么。

我只想瞄准主要的电子邮件客户端/地址簿(Outlook、Apple Mail、Entourage、Thunderbird)。所有这些都有完全不同的格式。 Entourage 使用制表符作为分隔符,其余部分使用逗号等。我只需要提取电子邮件地址和(如果有)姓名。由于某些客户的名字/姓氏有单独的字段,因此名称变得更加棘手。

Using 文件助手 http://www.filehelpers.com将是理想的,但似乎我需要知道 csv 的结构,然后才能找到解决方案。如果可能的话,我宁愿不去编写自己的 csv 解析器。

以下是我对集体蜂巢思维的看法:

Plan A

  • 读取 csv 文件的第一行(所有格式都将标题作为第一行)并计算制表符与逗号的数量。由此确定分隔符。
  • 使用某种类型的 csv 阅读器,例如流明工厂 http://www.codeproject.com/KB/database/CsvReader.aspx为我提供文件其余部分的基本 csv 读取功能。
  • 对每个字段执行正则表达式匹配以确定电子邮件列。
  • 不知道如何找出用户的名字......

Plan B

  • 提示用户输入电子邮件客户端的类型,并为每个不同的客户端单独编码

Plan C

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

想法?


我会选择 B 计划(我不同意它很笨重)。

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

即使解析每种类型的导出文件的逻辑有很大不同,您似乎也可以创建一个抽象基类来保存所有常见功能和派生类,这些类只需重写特定于客户端的功能。

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

我认为您不应该依赖可能分隔符的相对计数来确定实际分隔符是什么(如计划 A 中所示)。

Edit:我刚刚想到的另一个选择是提供一种像 MS Excel 那样的选项界面。您可以选择分隔符,并实时预览如何根据选择解析数据。

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

将 CSV 文件导入 C# 的相关文章

随机推荐