Ios SwiftCsv解析器支持双引号
Im使用Swiftcsv库解析CSV文件。 如何忽略双引号内字符串的逗号分隔符,例如Abcd,转到Apple? 在这里,解析器将Abcd作为一个值,并将其作为另一个值转到Apple 代码:Ios SwiftCsv解析器支持双引号,ios,iphone,csv,swift,Ios,Iphone,Csv,Swift,Im使用Swiftcsv库解析CSV文件。 如何忽略双引号内字符串的逗号分隔符,例如Abcd,转到Apple? 在这里,解析器将Abcd作为一个值,并将其作为另一个值转到Apple 代码: func parseRows(fromLines lines: [String]) -> [Dictionary<String, String>] { var rows: [Dictionary<String, String>] = [] for (lineN
func parseRows(fromLines lines: [String]) -> [Dictionary<String, String>] {
var rows: [Dictionary<String, String>] = []
for (lineNumber, line) in enumerate(lines) {
if lineNumber == 0 {
continue
}
var row = Dictionary<String, String>()
let values = line.componentsSeparatedByCharactersInSet(self.delimiter)
for (index, header) in enumerate(self.headers) {
let value = values[index]
row[header] = value
}
rows.append(row)
}
return rows
}
如何更改line.componentsSeparatedByCharactersInSetself.delimiter以忽略双引号中的逗号?我不知道您是否仍在寻找解决方案,但我刚刚想出了一个快速方法,因为这是我刚刚遇到的问题 这段代码不是完全可靠的,因为我只在一个次要项目中使用它,所以如果你想处理更多的情况,你可能需要做一些更改
func parseRows(fromLines lines: [String]) -> [Dictionary<String, String>] {
var rows: [Dictionary<String, String>] = []
for (lineNumber, line) in enumerate(lines) {
if lineNumber == 0 {
continue
}
var row = Dictionary<String, String>()
// escape commas in the string when it is surrounded by quotes
let convertedLine = NSString(string: line) // have to convert string to NSString because string does not have all NSString API
var escapedLine = line
var searchRange = NSMakeRange(1,convertedLine.length)
var foundRange:NSRange
if NSString(string: line).containsString("\"")
{
while (searchRange.location < convertedLine.length) {
searchRange.length = convertedLine.length-searchRange.location
foundRange = convertedLine.rangeOfString("\"", options: nil, range: searchRange)
if (foundRange.location != NSNotFound) {
// found a quotation mark
searchRange.location = foundRange.location+foundRange.length
let movieTitle = convertedLine.substringToIndex(foundRange.location)
escapedLine = convertedLine.stringByReplacingOccurrencesOfString(",", withString: "&c", options: nil, range: NSMakeRange(0,foundRange.location))
} else {
// no more substring to find
break
}
}
}
var values = escapedLine.componentsSeparatedByCharactersInSet(self.delimiter)
for (index, header) in enumerate(self.headers) {
var value = values[index]
//reinsert commas if they were escaped and get rid of quotation marks
value = value.stringByReplacingOccurrencesOfString("\"", withString: "")
value = value.stringByReplacingOccurrencesOfString("&c", withString: ",")
row[header] = value
}
rows.append(row)
}
return rows
}
用这个代替
有同样的问题。我花了大约一个小时才发现问题在于SwiftCSV不起作用
CSV文件中的文本在引号内,因此CSV中的逗号和换行符不会使解析器出错。我查看了SwiftCSV源代码,但没有对它的支持,这意味着任何逗号或换行符都会破坏解析
您可以修补SwiftCSV,或者直接使用我上面链接的CSwiftV。我会检查它,谢谢,我的CSV字段值之一是华盛顿特区,它不起作用。我得到这个错误:致命错误:数组索引超出范围。