カテゴリー: iOS

[Swift]CSVを読み込みRealmに保存してみる

はじめに

こんにちは、nukkyです。
今回はDBにプリセットなどを用意する際にCSVを使ってRealmで保存して見たいと思います。

前提条件

Xcode 9.x
iOS 11 Simulator
Swift 4.0

 

準備

Realmをインストール方法についてわからない方は以下のリンクにインストール手順を書いてあるのでご確認ください
Swift3でRealmを使ってみる

 

実装

DBに保存するためにRealmのObjectクラスを作成します

class User: Object {
    
    @objc dynamic var id = 0
    @objc dynamic var name = ""
}

上記、ObjectにあわせたCSVを用意します今回のサンプルでは適当にこんな感じでファイル名を「Sample.csv」、文字コードをUTF8とします

1,鈴木一郎
2,山田花子
3,山本太郎

CSVを読み込む処理を用意します

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に保存処理を用意します

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 {
    }
}

実際呼び出すときはこんな感じで

let csvArray = csvLoad(filename: "Sample")
for csvStr in csvArray {
    User().saveCsvValue(csvStr: csvStr)
}

 

さいごに

駆け足でやってしまいましたが、これでCSVからRealmに保存する最低限のことはできると思います。準備も手間もそれほどではないのでDBのプリセットなどを考えている方にご一考の一助となれれば嬉しいです!

nukky

シェア
執筆者:
nukky
タグ: Swift

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

4週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前