2011-08-10 71 views
1

我有一個包含大量數據的.csv文檔。它有71個不同的列。有沒有辦法重新排序SQLite管理器中的列?

現在我想將這些數據導入到Core Data中。但是,當我在xcdatamodel中創建屬性時,這些屬性按其名稱排序,而不是按照我希望它們的順序排序。所以當創建.sqlite文件時,列的順序是錯誤的。我試圖在SQLite管理器中對它們進行排序,但是當我重新打開.sqlite時,列的順序與更改前的順序相同。

有沒有辦法重新排序SQLite管理器中的列?

回答

1

那麼,71列是很多。既然你使用的是核心數據,我會建議嘗試一點點去標準化。核心數據不是表格數據庫。也就是說,我建議跟蹤當前列,並將數據存儲在數組中。然後,根據需要將數據分成NSManagedObjects。

編輯:

讓我們假設你的SQLite數據庫有順序三列:firstNamelastNamemiddleInitial。現在想象一下,您的CSV文件的順序不同,例如lastNamemiddleInitialfirstName。您可能會重新排序CSV文件或sqlite文件,但由於您使用的是核心數據,因此您可以通過另一種方式進行此操作。

您將擁有一個包含您所有屬性的實體。在我的例子中,它是「Person」實體。所以,我們繼續創建這個Person實體的一個實例。

Person *newPerson = [[Person alloc] initWithEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:context] insertIntoManagedObjectContext:context]; 

現在,你需要保持這個Person實例的引用,這樣就可以解析您CSV時訪問它。我推薦Dave DeLong的CHCSVParser library。實質上,它允許基於事件的CSV文件解析。

當您點擊一個新字段時,請檢查它是哪個字段號。你可以通過保持一個currentField變量來做到這一點,當你點擊一個新行時將其重置爲零,並在每個字段上遞增。現在,當你點擊一個字段時,如果該數字是0,或者第一個字段,則設置爲newPerson.lastName。如果是第二個字段,則分配newPerson.middleInitial。而且,如果你點擊第三個字段,你可以設置newPerson.firstName。這個想法是,你可以分配持久屬性,而無需觸及sqlite數據庫。如果你使用的是核心數據,這是一條路。

+0

.csv文檔有超過2000個帖子和71個不同的值。由於Core Data以特殊順序創建了.sqlite列,因此我需要對它們進行更改以使.csv文檔中的數據按正確順序排列。我認爲按照我想要的順序拖放SQLite-Manager中的列會很容易,但是當我重新打開.sqlite文件時,舊的順序就存在了。是否有一種簡單的方法來改變SQLite管理器的順序? – xqtr

+0

如果您使用的是核心數據,則不需要直接導入sqlite。改用NSManagedObjects。你不需要關心訂單。 – Moshe

+0

我以另一種方式解決了問題。我使用Excel改變了.csv文件中列的順序,然後將.csv文件導入到.sqlite文件,然後將.sqlite文件導入到我的項目中。奇蹟般有效! 謝謝你的幫助Moshe,但我不知道我是否理解你的答案。問題是我有一個.csv文件,以特定的方式存儲大量數據。我想導入文件,而不必手動插入所有數據,這將永遠持續下去。我不明白我應該如何通過Core Data和NSManagedObjects以簡單的方式進行操作? – xqtr

相關問題