【发布时间】:2019-04-03 13:33:37
【问题描述】:
我有一个 csv 文件,看起来像这样
Tag1,Tag2,Tag3,
some1,some2,some3,
some4,some5,some6,
有没有办法以编程方式将此文件导入领域数据库?
就像每次应用启动时一样,新的 csv 文件应该被导入到领域数据库中。
Tag1,Tag2,Tag3, 应该是列标题,some... 应该是值
【问题讨论】:
标签: ios swift database csv realm
我有一个 csv 文件,看起来像这样
Tag1,Tag2,Tag3,
some1,some2,some3,
some4,some5,some6,
有没有办法以编程方式将此文件导入领域数据库?
就像每次应用启动时一样,新的 csv 文件应该被导入到领域数据库中。
Tag1,Tag2,Tag3, 应该是列标题,some... 应该是值
【问题讨论】:
标签: ios swift database csv realm
目前没有开箱即用的解决方案,可用于以编程方式将csv 文件的内容导入现有的realm 文件。
您可以使用 Realm Studio 从 csv 文件创建新的领域文件。 Realm Cocoa Converter 也可用于从一个或多个 csv 文件生成新的领域文件,但是,为了能够将文件导入现有的领域文件,您需要修改转换器。请记住,Realm Cocoa Converter 仅支持 macOS,不能在 iOS 项目中使用。
或者您可以编写自己的代码将csv 文件转换为Realm Objects。解析 CSV 文件非常容易,验证它以确保它可以转换为 Realm 对象有点复杂。但是,从 JSON/plist 中,您可以使用 Codable 自动解析 Realm 对象。
【讨论】:
我的 macOS 应用程序将 tsv 文件的内容导入现有领域文件。这是我读取文件的功能。
func readFileFrom(_ fileURL: URL) -> [[String]]? {
do {
let content = try String(contentsOf: fileURL, encoding: .utf8)
let data: [[String]] = content.components(separatedBy: "\r\n").map { $0.components(separatedBy: "\t") }
return data
} catch {
//
}
return nil
}
然后,我将返回的数据传递给我的领域管理器类,该类生成并添加新对象。
guard let data = readFileFrom(url) else { return }
RealmManager.write(data: data)
对于csv 文件,您可以将components(separatedBy: "\t") 更改为components(separatedBy: ",")。
【讨论】: