Swift 3 code is here https://github.com/Daniel1of1/CSwiftV/blob/master/Sources/CSwiftV.swift
- csvsplit.swift Select all
//: Playground - noun: a place where people can play
import Foundation
public func split(string: String, _ separator: String = ",") -> [String] { // Swift 2.1
//public func split(_ string: String, _ separator: String = ",") -> [String] { // Swift 3
func oddNumberOfQuotes(string: String) -> Bool { // Swift 2.1
// func oddNumberOfQuotes(_ string: String) -> Bool { // Swift 3
return string.componentsSeparatedByString("\"").count % 2 == 0 // Swift 2.1
// return string.components(separatedBy: "\"").count % 2 == 0 // Swift 3
}
let initial = string.componentsSeparatedByString(separator) // Swift 2.1
// let initial = string.components(separatedBy: separator) // Swift 3
var merged = [String]()
for newString in initial {
if let record = merged.last {
guard oddNumberOfQuotes(record) == true else {
merged.append(newString)
continue
}
merged.removeLast()
let lastElem = record + separator + newString
merged.append(lastElem)
}
else {
merged.append(newString)
continue
}
}
return merged
}
public func csvsplit(string: String, _ rowSeparator: String = "\n", _ colSeparator: String = ",") -> [[String]] { // Swift 2.1
//public func csvsplit(_ string: String, _ rowSeparator: String = "\n", _ colSeparator: String = ",") -> [[String]] { // Swift 3
return split(string.stringByReplacingOccurrencesOfString("\r\n", withString: "\n"), rowSeparator).map{split($0, colSeparator)} // Swift 2.1
// return split(string.replacingOccurrences(of: "\r\n", with: "\n"), rowSeparator).map{split($0, colSeparator)} // Swift 3
}
print(csvsplit("aa,\"b,b\",cc\na,b,c"))
do {
// www.quandl.com api : anonymous user limit of 50 calls per day.
let csv = try String(contentsOfURL: NSURL(string: "https://www.quandl.com/api/v3/datasets/FRED/DEXJPUS.csv")!, encoding: NSUTF8StringEncoding) // Swift 2.1
// let csv = try String(contentsOf: Foundation.URL(string: "https://www.quandl.com/api/v3/datasets/FRED/DEXJPUS.csv")!) // Swift 3
// there are over 11 000 rows from this url, so playground will take some times to finish
print(split(csv,"\n")[0...2].map{split($0)})
}
catch let error {
print(error)
}
No comments:
Post a Comment