Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extension String {
- var trimmed: String {
- return self.trimmingCharacters(in: .whitespacesAndNewlines)
- }
- }
- enum Errors: Error {
- case filePathFailed
- case contentDataFailed
- case contentStringFailed
- }
- func readFile() throws {
- guard let filePath = Bundle.main.path(forResource:"SLP2 - Copy", ofType: "csv")
- else { throw Errors.filePathFailed }
- guard let contentData = FileManager.default.contents(atPath: filePath)
- else { throw Errors.contentDataFailed }
- guard let contentString = String(data: contentData, encoding: .utf8)
- else { throw Errors.contentStringFailed }
- let lines = contentString.components(separatedBy: "\n")
- print("Line Count: \(lines.count)")
- let dateFormatter_0 = DateFormatter()
- dateFormatter_0.calendar = Calendar.current
- dateFormatter_0.locale = Locale.current
- dateFormatter_0.dateFormat = "M/d/yy H:mm"
- let dateFormatter_1 = DateFormatter()
- dateFormatter_1.calendar = Calendar.current
- dateFormatter_1.locale = Locale.current
- dateFormatter_1.dateFormat = "M/d/yy HH:mm:ss"
- let dateFormatter_2 = DateFormatter()
- dateFormatter_2.calendar = Calendar.current
- dateFormatter_2.locale = Locale.current
- dateFormatter_2.dateFormat = "yyyy-MM-dd HH:mm"
- let finalString = lines
- .filter { (line) -> Bool in !line.trimmed.isEmpty }
- .map { (line) -> [String] in return line.components(separatedBy: "\",") }
- .map { (array) -> (start: String, end: String) in return (array[0] + "\"", array[1].trimmed) }
- .compactMap { (item) -> (text: String, date: Date)? in
- let d = dateFormatter_0.date(from: item.end) ?? dateFormatter_1.date(from: item.end)
- guard let date = d else { return nil }
- return (item.start, date)
- }
- .map { (item) -> String in return "\(item.text),\(dateFormatter_2.string(from: item.date))" }
- .joined(separator: "\n")
- let fileUrl = URL(fileURLWithPath: filePath)
- let finalFileUrl = fileUrl
- .deletingLastPathComponent()
- .appendingPathComponent("FinalCSVFile.csv")
- do {
- print("Start Writing File...")
- try ("kwh, Datetime" + "\n" + finalString).write(to: finalFileUrl, atomically: false, encoding: .utf8)
- print("File Created: \(finalFileUrl.absoluteString)")
- } catch {
- print("Write String to File Failed: \(error)")
- }
- }
- do {
- try readFile()
- } catch {
- print("Error: \(error as! Errors)")
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement