Pasted CSV struct from other project

This commit is contained in:
Caleb Kleveter 2018-01-12 16:13:24 -06:00
parent a738a5be40
commit f02e30b1bc
1 changed files with 52 additions and 1 deletions

View File

@ -1,3 +1,54 @@
import Bits
struct CSV {
var text = "Hello, World!"
struct Column {
let header: String
var fields: [String?]
}
static func parse(_ bytes: Bytes) -> [String: [String?]] {
let parsed: [Column] = parse(bytes)
var columns: [String: [String?]] = [:]
for column in parsed {
columns[column.header] = column.fields
}
return columns
}
static func parse(_ bytes: Bytes) -> [String: Column] {
let parsed: [Column] = parse(bytes)
var columns: [String: Column] = [:]
for column in parsed {
columns[column.header] = column
}
return columns
}
static func parse(_ bytes: Bytes) -> [Column] {
var rows = bytes.split(separator: Byte.newLine)
guard let headers = rows.first?.split(separator: Byte.comma) else {
return []
}
rows.removeFirst()
var columns: [Column] = headers.map({ header in
let head = header.makeString()
let column = Column(header: head, fields: [])
return column
})
for row in rows {
for (cell, columnIndex) in zip(row.split(separator: Byte.comma, omittingEmptySubsequences: false), 0...columns.count-1) {
let text = cell == [] ? nil : cell.makeString()
columns[columnIndex].fields.append(text)
}
}
return columns
}
}