ios - 如何在 Swift 中将文本添加到 .csv 数据中?

标签 ios swift csv

我想在我的 .csv 文件中添加一些文本,例如 “Hi;Test;Pen”

我已经使用了CSVImporter将 .csv 的文本插入到我的 Xcode 项目中。这是我使用过的代码:

    guard let VokabelPath = Bundle.main.path(forResource: ResourceExample, ofType:"csv") else {
        debugPrint(ResourceExample + " not found")
        return
    }
    let importer = CSVImporter<[String]>(path: VokabelPath, delimiter: ";")
    let importedRecords = importer.importRecords { $0 }
    for record in importedRecords {
        self.Vokabeln.insert(record, at: self.Vokabelzähler)
        self.Vokabelzähler += 1
    }

但由于某些原因我想

  1. 向文件添加内容
  2. 更改文件中的某些内容(例如第 4 行)
  3. 删除文件中的文本(例如filetext = ""

我尝试使用this教程和我编写了这段代码:

let fileName = "Tasks.csv"
let path = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName)
var csvText = "Test;Example;Apple;Pen\n"
do {
    try csvText.write(to: path!, atomically: true, encoding: String.Encoding.utf8)
} catch {
    print("Failed to create file")
    print("\(error)")
}


guard let VokabelPath = Bundle.main.path(forResource: "Tasks", ofType:"csv") else {
    debugPrint("Tasks not found")
    return
}
let importer = CSVImporter<[String]>(path: VokabelPath, delimiter: ";")
let importedRecords = importer.importRecords { $0 }
for record in importedRecords {
    self.Vokabeln.insert(record, at: self.Vokabelzähler)
    self.Vokabelzähler += 1
    print(record)
}

但他只打印“未找到任务”。我的错误是什么?

希望你能帮助我

谢谢。

编辑:

第一个答案的人写道,我无法在 bundle 中保存文件。 他写信给我,我应该使用 NSSearchPathForDirectoriesInDomains,所以我更新了我的代码,这有效:

let DownloadPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
let VokabelPath = DownloadPath.appendingPathComponent("Tasks.csv")
let InhaltData = Inhalt.data(using: .utf8)
print(VokabelPath)

FileManager.default.createFile(atPath: VokabelPath, contents: InhaltData, attributes: nil)

let importer = CSVImporter<[String]>(path: VokabelPath, delimiter: ";")
let importedRecords = importer.importRecords { $0 }
for record in importedRecords {
    self.Vokabeln.insert(record, at: self.Vokabelzähler)
    self.Vokabelzähler += 1
}

但是我还有一个问题: 我的 Xcode 项目中有一些数据,我可以使用 Bundle.main 获取它们。但我只想使用一个函数,那么是否也可以使用 NSSearchPathForDirectoriesInDomains 来获取它们?

最佳答案

为了更改文件,您需要导入数据,对数据进行必要的更改,然后将数据写回同一文件,覆盖以前的内容。这就是通常进行更改的方式 - 您不会直接对文件进行更改。

这有意义吗?

如果是这样,那么您可以轻松修改您指向的教程(用于创建和导出 CSV 的教程),并在进行修改后写回从原始文件中读取的数据。

至于您不想使用库的问题,您始终可以编写自己的 CSV 解析器。这并不是很困难,因为您所要做的就是从文件中一次一行读取文本,然后用逗号分隔出值。一个简单的解析器很简单,但允许更复杂的情况可能需要更多的努力。这完全取决于您的用例和您要处理的数据类型。最简单的方法仍然是使用导入库,然后通过自定义代码输出。

关于您的其他问题,如果以下代码失败:

guard let VokabelPath = Bundle.main.path(forResource: "Tasks", ofType:"csv") else {
    debugPrint("Tasks not found")
    return
}

那么,要么是文件名(或扩展名)有问题,要么是您没有将该文件包含在您的资源中。上面的代码只是获取资源中给定文件的路径。

上面的代码与我所说的关于 NSSearchPathForDirectoriesInDomains 的代码不同 - 那是用于从您的应用写入文件。我的意思是,您无法将文件写回到资源中 - 相反,您必须将修改后的文件写入文档文件夹中。希望能够澄清问题:)

关于ios - 如何在 Swift 中将文本添加到 .csv 数据中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43161238/

相关文章:

ios - 更新到 Swift 3 后的问题

swift - 在调用 Text 的初始化程序时没有完全匹配,我该如何在 SwiftUI 中解决这个问题?

postgresql - Greenplum,是否可以将 CSV 导出到远程服务器?

ios - View Controller 的 Swift 方向覆盖

python - 读取包含 pandas 数据帧的 csv 文件时出现编码错误

node.js - 无法使用express js在node js中下载csv文件

java - 用户是否可以授予应用程序权限,以便该应用程序可以在需要时让设备被发现?

ios - 静态更改特定的 UITableView 单元格高度而无需重新加载

ios - 后台获取和本地通知

ios - "Stick"UIView和SCNNode一起做动画