2011-04-21 17 views
1

我知道标题不是最具描述性的,但我想不出有更好的方式来描述它。在PHP/Mysql中处理动态CSV标题

最终什么,我想这样做是这样的:

我在做的是通过CSV从几个不同的公司处理的数据导入系统。当然,每家公司的格式略有不同,每列/标题和不同安排的数据量不同。

我既可以:

  1. 硬代码的文件格式转换成程序,这是快速和简单的程序,而不是抽象的,面向未来的

  2. 提供“动态性”通过允许用户在系统中配置“文件格式”,通过拖放CSV标题并为每个传入文件格式保存预设。

我想做选项2,但我该怎么做呢?

我猜标签风格系统会做到这一点...但任何意见,将不胜感激。

我使用PHP,MySQL和CodeIgniter 2.0.2(如果有帮助的话),也可以访问我应用中的所有Zend库。

+0

为什么不把第一行作为列名? – 2011-04-21 22:19:24

+0

正如@Drackir所说 - 第一行中的列名称。然后有一个将列名映射到列号的数组。使用它可以将其重新格式化为标准数据集。 – jmathai 2011-04-21 22:40:46

+0

你的意思是CSV的第一行吗?当公司运行出口时,我无法控制CSV中的内容。其中一些甚至没有标题行... 另外,即使你有一个标题行,你如何将这些数据导入到MySQL数据库中,例如,不知道每种数据类型?例如,哪一列是一个日期字段,这是一个数字,这是VARCHAR,等等......谢谢 – George 2011-04-21 22:54:22

回答

1

假设用户将提交您预先定义的可能数据类型的子集,这应该不会太难。

一个简单的表单允许用户选择数据类型并在csv中给出字段名称,可用于创建您提到的模板。将它们存储在与用户关联的数据库表中,并使其在导入csv之前选择一个模板。对于没有标题行的csvs的客户,他们告诉您每种数据类型的列号略有差异。

我还建议为尚未定义出口的客户提供预定义的格式。这样他们可以建立他们的出口到你的格式之一。

你也可以让用户定义他们的默认模板。这样,如果他们总是以相同格式导入数据,他们在每次导入数据时都不必选择模板。

+0

标记为答案,完全忘了。你不完全分享任何细节,你主要回应我的想法,但另一方面,这是收到的最好(唯一)答案。所以谢谢你的时间:) – George 2011-05-29 17:06:33