2011-08-10 12 views
1

多くのデータを持つ.csvドキュメントがあります。それは71の異なる列を持っています。SQLite-managerの列を並べ替える方法はありますか?

ここでこのデータをコアデータにインポートします。しかし、私がxcdatamodelで属性を作成するとき、属性はその名前でソートされます。したがって、.sqliteファイルが作成されると、列の順序が間違っています。私はSQLiteマネージャーでそれらを注文しようとしましたが、.sqliteを再び開くと、変更前の列と同じ順序になります。

SQLite-managerの列を並べ替える方法はありますか?

答えて

1

まあ、71列はたくさんあります。コアデータを使用しているので、私は少し非正規化しようと提案します。コアデータは表形式のデータベースではありません。つまり、現在の列を追跡し、配列にデータを格納することをお勧めします。次に、必要に応じてデータをNSManagedObjectsに分割します。

EDIT:firstNamelastNamemiddleInitial

のは、あなたのSQLiteデータベースがこの順で3つの列を持っていたことをふりをしてみましょう。 CSVファイルには、lastName,middleInitial,firstNameなどの異なる順序でファイルがあるとします。 CSVファイルまたはsqliteファイルの順序を変更することはできますが、コアデータを使用しているため、別の方法で行うことができます。

あなたはすべてのプロパティを持つエンティティを持つ予定です。私の例では、それは "Person"エンティティです。そこで、このPersonエンティティのインスタンスを作成します。

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

は今、あなたのCSVを解析するとき、あなたがそれにアクセスできるように、このPersonインスタンスへの参照を維持する必要があります。私はDave DeLongのCHCSVParser libraryをお勧めします。基本的に、イベントベースのCSVファイルの解析が可能です。

新しいフィールドにヒットしたときは、そのフィールド番号を確認します。これを行うには、currentField変数を保持し、新しい行をヒットしたときにゼロにリセットし、すべてのフィールドをインクリメントします。今、フィールドをヒットしたとき、数値が0または最初のフィールドの場合は、newPerson.lastNameと設定します。 2番目のフィールドの場合は、newPerson.middleInitialを割り当てます。 3番目のフィールドにヒットした場合は、newPerson.firstNameと設定します。考え方は、sqliteデータベースに触れることなく永続プロパティを割り当てることができるということです。コアデータを使用している場合は、この方法があります。

+0

.csv-documentには2000を超える投稿と71の異なる値があります。コアデータは特別な順序で.sqlite列を作成しているので、.csv-文書のデータが正しい順序で来るように変更する必要があります。 SQLite-Managerのカラムを必要な順番にドラッグするだけで、これが簡単になると思っていましたが、.sqliteファイルを再オープンすると古いオーダーが表示されます。 SQLiteマネージャーで順序を変更する簡単な方法はありませんか? – xqtr

+0

コアデータを使用している場合は、sqliteに直接インポートする必要はありません。代わりにNSManagedObjectsを使用してください。あなたは注文よりも気にする必要はありません。 – Moshe

+0

私は別の方法で問題を解決しました。 Excelで.csvファイルの列の順序を変更し、.csvファイルを.sqliteファイルにインポートし、.sqliteファイルをプロジェクトにインポートしました。魅力的な作品! あなたのお手伝いをしていただきありがとうございます。問題は、特定の方法でデータが格納された.csvファイルがあることでした。私は手動ですべてのデータを挿入することなく、ファイルをインポートしたいと思っていました。コアデータとNSManagedObjectsを使って簡単な方法でこれをどうやってやるべきか分かりません。 – xqtr

関連する問題