2011-04-21 20 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