【问题标题】:Get csv file in realm database with Swift使用 Swift 在领域数据库中获取 csv 文件
【发布时间】: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


    【解决方案1】:

    目前没有开箱即用的解决方案,可用于以编程方式将csv 文件的内容导入现有的realm 文件。

    您可以使用 Realm Studio 从 csv 文件创建新的领域文件。 Realm Cocoa Converter 也可用于从一个或多个 csv 文件生成新的领域文件,但是,为了能够将文件导入现有的领域文件,您需要修改转换器。请记住,Realm Cocoa Converter 仅支持 macOS,不能在 iOS 项目中使用。

    或者您可以编写自己的代码将csv 文件转换为Realm Objects。解析 CSV 文件非常容易,验证它以确保它可以转换为 Realm 对象有点复杂。但是,从 JSON/plist 中,您可以使用 Codable 自动解析 Realm 对象。

    【讨论】:

    • 只是为未来的读者添加.02;虽然 Realm Studio 应用程序没有导入功能,但 OP 询问是否可以以编程方式完成。因此,虽然这是一个公认的答案,但为了澄清,有很多方法可以以编程方式导入文件的内容,而且 csv 文件很容易使用,因此以编程方式将 csv 文件的内容移动到 Realm 大约需要 10 行代码加上一个领域对象。因此,基于就像每次应用启动时,新的 csv 文件都应该导入到领域数据库中。 可以在项目中完成。
    • @Jay 你是对的,我应该更准确。没有开箱即用的解决方案,这就是我的意思。显然,这个问题可以通过编程来解决。更新了我的答案。
    【解决方案2】:

    我的 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: ",")

    【讨论】:

    • 这可能是根据问题接受的更好答案。 OP 询问如何以编程方式将此文件导入领域数据库,此答案准确显示了如何执行该任务。
    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多