はじめに
こんにちは、nukkyです。
今回はDBにプリセットなどを用意する際にCSVを使ってRealmで保存して見たいと思います。
前提条件
Xcode 9.x
iOS 11 Simulator
Swift 4.0
準備
Realmをインストール方法についてわからない方は以下のリンクにインストール手順を書いてあるのでご確認ください
Swift3でRealmを使ってみる
実装
DBに保存するためにRealmのObjectクラスを作成します
1 2 3 4 5 | class User: Object { @objc dynamic var id = 0 @objc dynamic var name = "" } |
上記、ObjectにあわせたCSVを用意します今回のサンプルでは適当にこんな感じでファイル名を「Sample.csv」、文字コードをUTF8とします
1 2 3 | 1,鈴木一郎 2,山田花子 3,山本太郎 |
CSVを読み込む処理を用意します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | func csvLoad(filename:String)->[String]{ //csvファイルを格納するための配列を作成 var csvArray:[String] = [] //csvファイルの読み込み let csvBundle = Bundle.main.path(forResource: filename, ofType: "csv") do { //csvBundleのパスを読み込み、UTF8に文字コード変換して、NSStringに格納 let tsvData = try String(contentsOfFile: csvBundle!, encoding: String.Encoding.utf8) //改行コードが\n一つになるようにします var lineChange = tsvData.replacingOccurrences(of: "\r", with: "\n") lineChange = lineChange.replacingOccurrences(of: "\n\n", with: "\n") //"\n"の改行コードで区切って、配列csvArrayに格納する csvArray = lineChange.components(separatedBy: "\n") } catch { print("エラー") } return csvArray } |
Realmに保存処理を用意します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | func saveCsvValue(csvStr:String) { // CSVなのでカンマでセパレート let splitStr = csvStr.components(separatedBy: ",") self.id = Int(splitStr[0])! self.name = splitStr[1] // 保存 let realm = try! Realm() do { try realm.write { realm.add(self) } } catch { } } |
実際呼び出すときはこんな感じで
1 2 3 4 | let csvArray = csvLoad(filename: "Sample") for csvStr in csvArray { User().saveCsvValue(csvStr: csvStr) } |
さいごに
駆け足でやってしまいましたが、これでCSVからRealmに保存する最低限のことはできると思います。準備も手間もそれほどではないのでDBのプリセットなどを考えている方にご一考の一助となれれば嬉しいです!