Add enum Newline for Writer
This commit is contained in:
parent
015caedd64
commit
3639a75c33
|
@ -19,7 +19,6 @@ internal let defaultHasHeaderRow = false
|
|||
internal let defaultTrimFields = false
|
||||
internal let defaultDelimiter: UnicodeScalar = ","
|
||||
internal let defaultWhitespaces = CharacterSet.whitespaces
|
||||
internal let defaultNewline: UnicodeScalar = LF
|
||||
|
||||
/// No overview available.
|
||||
public class CSVReader {
|
||||
|
@ -353,22 +352,22 @@ extension CSVReader {
|
|||
|
||||
}
|
||||
|
||||
extension CSVReader {
|
||||
|
||||
public func enumerateRows(_ block: (([String], [String]?, inout Bool) throws -> Void)) throws {
|
||||
var stop = false
|
||||
while let row = readRow() {
|
||||
try block(row, headerRow, &stop)
|
||||
if stop {
|
||||
break
|
||||
}
|
||||
}
|
||||
if let error = error {
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//extension CSVReader {
|
||||
//
|
||||
// public func enumerateRows(_ block: (([String], [String]?, inout Bool) throws -> Void)) throws {
|
||||
// var stop = false
|
||||
// while let row = readRow() {
|
||||
// try block(row, headerRow, &stop)
|
||||
// if stop {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// if let error = error {
|
||||
// throw error
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//}
|
||||
|
||||
extension CSVReader: IteratorProtocol {
|
||||
|
||||
|
|
|
@ -15,13 +15,26 @@ public class CSVWriter {
|
|||
public var delimiter: String
|
||||
public var newline: String
|
||||
|
||||
internal init(delimiter: String, newline: String) {
|
||||
internal init(delimiter: String, newline: Newline) {
|
||||
self.delimiter = delimiter
|
||||
self.newline = newline
|
||||
|
||||
switch newline {
|
||||
case .lf: self.newline = String(LF)
|
||||
case .crlf: self.newline = String(CR) + String(LF)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public enum Newline {
|
||||
|
||||
/// "\n"
|
||||
case lf
|
||||
/// "\r\n"
|
||||
case crlf
|
||||
|
||||
}
|
||||
|
||||
public let stream: OutputStream
|
||||
public let configuration: Configuration
|
||||
fileprivate let writeScalar: ((UnicodeScalar) throws -> Void)
|
||||
|
@ -59,7 +72,7 @@ extension CSVWriter {
|
|||
public convenience init(
|
||||
stream: OutputStream,
|
||||
delimiter: String = String(defaultDelimiter),
|
||||
newline: String = String(defaultNewline)
|
||||
newline: Newline = .lf
|
||||
) throws {
|
||||
|
||||
try self.init(stream: stream, codecType: UTF8.self, delimiter: delimiter, newline: newline)
|
||||
|
@ -69,7 +82,7 @@ extension CSVWriter {
|
|||
stream: OutputStream,
|
||||
codecType: T.Type,
|
||||
delimiter: String = String(defaultDelimiter),
|
||||
newline: String = String(defaultNewline)
|
||||
newline: Newline = .lf
|
||||
) throws where T.CodeUnit == UInt8 {
|
||||
|
||||
let config = Configuration(delimiter: delimiter, newline: newline)
|
||||
|
@ -93,7 +106,7 @@ extension CSVWriter {
|
|||
codecType: T.Type,
|
||||
endian: Endian = .big,
|
||||
delimiter: String = String(defaultDelimiter),
|
||||
newline: String = String(defaultNewline)
|
||||
newline: Newline = .lf
|
||||
) throws where T.CodeUnit == UInt16 {
|
||||
|
||||
let config = Configuration(delimiter: delimiter, newline: newline)
|
||||
|
@ -120,7 +133,7 @@ extension CSVWriter {
|
|||
codecType: T.Type,
|
||||
endian: Endian = .big,
|
||||
delimiter: String = String(defaultDelimiter),
|
||||
newline: String = String(defaultNewline)
|
||||
newline: Newline = .lf
|
||||
) throws where T.CodeUnit == UInt32 {
|
||||
|
||||
let config = Configuration(delimiter: delimiter, newline: newline)
|
||||
|
|
|
@ -188,7 +188,7 @@ class CSVWriterTests: XCTestCase {
|
|||
let stream = OutputStream(toMemory: ())
|
||||
stream.open()
|
||||
|
||||
let csv = try! CSVWriter.init(stream: stream, newline: "\r\n")
|
||||
let csv = try! CSVWriter.init(stream: stream, newline: .crlf)
|
||||
csv.beginNewRow()
|
||||
try! csv.write(field: str + "-1")
|
||||
csv.beginNewRow()
|
||||
|
|
|
@ -125,11 +125,12 @@ class LineBreakTests: XCTestCase {
|
|||
|
||||
private func parse(csv: String) -> [[String]] {
|
||||
let reader = try! CSVReader(string: csv)
|
||||
var records = [[String]]()
|
||||
try! reader.enumerateRows { (row, _, _) in
|
||||
records.append(row)
|
||||
}
|
||||
return records
|
||||
return reader.map { $0 }
|
||||
// var records = [[String]]()
|
||||
// try! reader.enumerateRows { (row, _, _) in
|
||||
// records.append(row)
|
||||
// }
|
||||
// return records
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -112,11 +112,12 @@ class UnicodeTests: XCTestCase {
|
|||
}
|
||||
|
||||
private func getRecords(csv: CSVReader) -> [[String]] {
|
||||
var records = [[String]]()
|
||||
try! csv.enumerateRows { (record, _, _) in
|
||||
records.append(record)
|
||||
}
|
||||
return records
|
||||
return csv.map { $0 }
|
||||
// var records = [[String]]()
|
||||
// try! csv.enumerateRows { (record, _, _) in
|
||||
// records.append(record)
|
||||
// }
|
||||
// return records
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue