有用於掃描CSV文件導入使用斯威夫特您的應用幾種不同的方法。我發現我能夠創建我自己的類方法,我認爲它是最有用的。
我必須道歉,因爲我沒有引用其他幫助我的開發人員的互聯網帖子 - 如果我再次與他們交流,那麼我一定會包括他們!
這裏是類:
import Foundation
class CSVScanner {
class func debug(string:String){
println("CSVScanner: \(string)")
}
class func runFunctionOnRowsFromFile(theColumnNames:Array<String>, withFileName theFileName:String, withFunction theFunction:(Dictionary<String, String>)->()) {
if let strBundle = NSBundle.mainBundle().pathForResource(theFileName, ofType: "csv") {
var encodingError:NSError? = nil
if let fileObject = NSString(contentsOfFile: strBundle, encoding: NSUTF8StringEncoding, error: &encodingError){
var fileObjectCleaned = fileObject.stringByReplacingOccurrencesOfString("\r", withString: "\n")
fileObjectCleaned = fileObjectCleaned.stringByReplacingOccurrencesOfString("\n\n", withString: "\n")
let objectArray = fileObjectCleaned.componentsSeparatedByString("\n")
for anObjectRow in objectArray {
let objectColumns = anObjectRow.componentsSeparatedByString(",")
var aDictionaryEntry = Dictionary<String, String>()
var columnIndex = 0
for anObjectColumn in objectColumns {
aDictionaryEntry[theColumnNames[columnIndex]] = anObjectColumn.stringByReplacingOccurrencesOfString("\"", withString: "", options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil)
columnIndex++
}
if aDictionaryEntry.count>1{
theFunction(aDictionaryEntry)
}else{
CSVScanner.debug("No data extracted from row: \(anObjectRow) -> \(objectColumns)")
}
}
}else{
CSVScanner.debug("Unable to load csv file from path: \(strBundle)")
if let errorString = encodingError?.description {
CSVScanner.debug("Received encoding error: \(errorString)")
}
}
}else{
CSVScanner.debug("Unable to get path to csv file: \(theFileName).csv")
}
}
}
您可以實現它在你的代碼是這樣的:
var myCSVContents = Array<Dictionary<String, String>>()
CSVScanner.runFunctionOnRowsFromFile(["title", "body", "category"], withFileName: "fileName.csv", withFunction: {
(aRow:Dictionary<String, String>) in
myCSVContents.append(aRow)
})
這將生成字典對象的數組,每個代表一行來自CSV。您需要提供一個數組作爲包含csv文檔標題標籤的第一個參數 - 確保爲每個列添加標籤!
但是,可以跳過將行添加到數組 - 您可以在每行上運行您喜歡的任何函數。例如,您可能希望將這些直接添加到CoreData對象中。
我的應用程序已經掃描.csv文件。我只問,它如何從2個文件而不是1個文件掃描。 m代碼必須有一個小的改變才能使它工作,但我是一個新手 – Peter