ios - 如何使用 Swift 创建 CSV 文件

标签 ios swift csv export

在我创建的一个用于从 Apple 铅笔输入收集数据的应用程序中,我尝试将数据导出到 CSV 文件中。但到目前为止,我只设法创建一个记录时间长度的列。我想添加另一列来记录 Apple 铅笔的力。

这是我尝试做的:

var patientsData:[Dictionary<String, AnyObject>] = Array()
var dct = Dictionary<String, AnyObject>()

// MARK: CSV writing
func createCSVX(from recArray:[Dictionary<String, AnyObject>]) {
var csvString = "\("Time")\n"
dct.updateValue(TestDraw.time as AnyObject, forKey: "T")
csvString = csvString.appending("\(String(describing: dct["T"]))\n")
patientsData.append(dct)
let fileManager = FileManager.default
do {
    let path = try fileManager.url(for: .documentDirectory, in: .allDomainsMask, appropriateFor: nil, create: false)
    let fileURL = path.appendingPathComponent("TrailTime.csv")
    try csvString.write(to: fileURL, atomically: true, encoding: .utf8)
} catch {
    print("error creating file")
    }

}

我知道我可以编写另一个函数来创建另一个带有单列的 CSV 文件来记录力,但我想将它们记录在一个电子表格中。

另外,有人知道如何删除创建的 CSV 文件中的“可选”吗?

这是我根据其中一个答案所做的尝试。

func createCSVX(from recArray:[Dictionary<String, AnyObject>]) {
var csvString = "\("Time"),\("Force")\n"

dct.updateValue(TestDraw.time as AnyObject, forKey: "T")

dct.updateValue(TestDraw.force as AnyObject, forKey: "F")

patientsData.append(dct)

csvString = csvString.appending("\(String(describing: dct["T"])), \(String(describing:   dct["F"]))\n")

let fileManager = FileManager.default

do {

let path = try fileManager.url(for: .documentDirectory, in: .allDomainsMask, appropriateFor: nil , create: false )

let fileURL = path.appendingPathComponent("TrailTime.csv")

try csvString.write(to: fileURL, atomically: true , encoding: .utf8)
} catch {

print("error creating file")

}

print(TestDraw.force)

}

Screeshot of the exported CSV file

最佳答案

教程复制自 https://iostutorialjunction.com/2018/01/create-csv-file-in-swift-programmatically.html :

第 1 步:

创建一个名为“employeeArray”的数组,它将存储员工的所有记录作为键值对象。我们还将向新创建的数组添加虚拟数据

class ViewController: UIViewController {
 var employeeArray:[Dictionary<String, AnyObject>] =  Array()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
   for i in 1...10 {
            var dct = Dictionary<String, AnyObject>()
            dct.updateValue(i as AnyObject, forKey: "EmpID")
            dct.updateValue("NameForEmplyee id = \(i)" as AnyObject, forKey: "EmpName")
            employeeArray.append(dct)
        }
    }
}

第 2 步:现在我们有了数据,是时候使用 swift 以编程方式创建 CSV(逗号分隔值)文件了。为此,我们将循环遍历“employeeArray”中的记录并将它们附加到字符串中。然后我们将该字符串写入应用程序的文档目录。所有的东西都在名为“createCSV”的不同函数中,下面是相同的代码

func createCSV(from recArray:[Dictionary<String, AnyObject>]) {
        var csvString = "\("Employee ID"),\("Employee Name")\n\n"
        for dct in recArray {
            csvString = csvString.appending("\(String(describing: dct["EmpID"]!)) ,\(String(describing: dct["EmpName"]!))\n")
        }
        
        let fileManager = FileManager.default
        do {
            let path = try fileManager.url(for: .documentDirectory, in: .allDomainsMask, appropriateFor: nil, create: false)
            let fileURL = path.appendingPathComponent("CSVRec.csv")
            try csvString.write(to: fileURL, atomically: true, encoding: .utf8)
        } catch {
            print("error creating file")
        }

    }

第 3 步:最后我们将从“viewDidLoad”调用我们的函数。下面是完整的代码

class ViewController: UIViewController {
 var employeeArray:[Dictionary<String, AnyObject>] =  Array()
    
    override func viewDidLoad() {
        super.viewDidLoad()
         for i in 1...10 {
                   var dct = Dictionary<String, AnyObject>()
                   dct.updateValue(i as AnyObject, forKey: "EmpID")
                   dct.updateValue("NameForEmplyee id = \(i)" as AnyObject, forKey: "EmpName")
                   employeeArray.append(dct)
               }

               createCSV(from: employeeArray)

    }
 
 func createCSV(from recArray:[Dictionary<String, AnyObject>]) {
        var csvString = "\("Employee ID"),\("Employee Name")\n\n"
        for dct in recArray {
            csvString = csvString.appending("\(String(describing: dct["EmpID"]!)) ,\(String(describing: dct["EmpName"]!))\n")
        }
        
        let fileManager = FileManager.default
        do {
            let path = try fileManager.url(for: .documentDirectory, in: .allDomainsMask, appropriateFor: nil, create: false)
            let fileURL = path.appendingPathComponent("CSVRec.csv")
            try csvString.write(to: fileURL, atomically: true, encoding: .utf8)
        } catch {
            print("error creating file")
        }

    }
 }

关于ios - 如何使用 Swift 创建 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55870174/

相关文章:

ios - 将 NSDate 从不带年份的字符串设置为当前年份,Swift

ios - BSDatePicker 可以快速设置最小日期和最大日期吗?

excel - 如何使用 VBA 使用 @ 作为分隔符导入 csv 文件

ios - 使用 UIButton (UIView) 制作可缩放的文本字体

ios - 将 Obj-C 函数完成处理程序代码转换为 Swift 2.0 时出错

ios - 读取 AVAudioFile 缓冲区时崩溃创建 Waves Swift

scala - 当最后一列名称包含空格时,Spark 无法读取 CSV

python - 缺少值的 DataFrame 列将不接受输入

objective-c - 更改 UIBarButtonItem 的位置

iphone - 为什么我的应用程序中着色器的路径为零?