0
我有一個CSV掃描方法,我找到here。導致我在那裏的SO答案是here。使用文本字段將CSV掃描到Array Swift
我的問題是:我想偶爾掃描CSV數據包含逗號(在一個名爲「註釋」以及其他領域)。這在我掃描csv時會出現問題,因爲它會將notes字段解釋爲具有分離值。
有人可以幫我編輯此方法來正確處理文本字段內的逗號嗎?我也不確定如何保存csv來分隔該字段。不知道我的確切更改需要在此方法中以及csv的保存選項中進行。
這裏是直接從我的應用程序的功能:
func scanCSV() -> Array<Dictionary<String,String>> {
var myCSVContents = Array<Dictionary<String, String>>()
//rawData is a global string variable that gets set to the CSV string on object init.
let allRows = rawData.componentsSeparatedByString("\n")
let headers = allRows[0].componentsSeparatedByString(",")
runFunctionOnRowsFromFile(headers, withFunction: {
(aRow: Dictionary<String, String>) in
myCSVContents.append(aRow)
})
return myCSVContents
}
func runFunctionOnRowsFromFile(theColumnNames:Array<String>, withFunction theFunction:(Dictionary<String, String>)->()) {
var fileObjectCleaned = rawData.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)
}
}
}
我意識到這個問題已經被問過,但我得到我被這個語法差異,其他語言都具有這些問題的答案混淆。我是一名新程序員,如果這不是非常明顯的話。
我建議找到一個現有的CSV解析器,如[this](https://github.com/Daniel1of1/CSwiftV)或[this](https://github.com/naoty/SwiftCSV)並使用它代替。 –
@Elogent - 你知道這些是否明確處理我正在努力的條件?在自述文件中,他們沒有馬上出來,並說他們做 – Charlie
第一個說它符合[rfc4180](http://tools.ietf.org/html/rfc4180#section-2),所以我會假設所以。 –