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