Use `String.UnicodeScalarView` instead of `String`
This commit is contained in:
parent
143a9b9740
commit
c6cdbd1bd8
|
@ -19,6 +19,7 @@ public class CSV {
|
||||||
private let config: CSVConfiguration
|
private let config: CSVConfiguration
|
||||||
|
|
||||||
private var back: UnicodeScalar? = nil
|
private var back: UnicodeScalar? = nil
|
||||||
|
private var fieldBuffer = String.UnicodeScalarView()
|
||||||
|
|
||||||
private var currentRowIndex: Int = 0
|
private var currentRowIndex: Int = 0
|
||||||
private var currentFieldIndex: Int = 0
|
private var currentFieldIndex: Int = 0
|
||||||
|
@ -157,7 +158,7 @@ public class CSV {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func readField(quoted: Bool) -> (String, Bool) {
|
private func readField(quoted: Bool) -> (String, Bool) {
|
||||||
var field = ""
|
fieldBuffer.removeAll(keepingCapacity: true)
|
||||||
|
|
||||||
while let c = moveNext() {
|
while let c = moveNext() {
|
||||||
if quoted {
|
if quoted {
|
||||||
|
@ -179,19 +180,19 @@ public class CSV {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// END ROW
|
// END ROW
|
||||||
return (field, true)
|
return (String(fieldBuffer), true)
|
||||||
} else if cNext == config.delimiter {
|
} else if cNext == config.delimiter {
|
||||||
// END FIELD
|
// END FIELD
|
||||||
return (field, false)
|
return (String(fieldBuffer), false)
|
||||||
} else if cNext == DQUOTE {
|
} else if cNext == DQUOTE {
|
||||||
// ESC
|
// ESC
|
||||||
field.append(String(DQUOTE))
|
fieldBuffer.append(DQUOTE)
|
||||||
} else {
|
} else {
|
||||||
// ERROR?
|
// ERROR?
|
||||||
field.append(String(c))
|
fieldBuffer.append(c)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
field.append(String(c))
|
fieldBuffer.append(c)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if c == CR || c == LF {
|
if c == CR || c == LF {
|
||||||
|
@ -202,18 +203,18 @@ public class CSV {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// END ROW
|
// END ROW
|
||||||
return (field, true)
|
return (String(fieldBuffer), true)
|
||||||
} else if c == config.delimiter {
|
} else if c == config.delimiter {
|
||||||
// END FIELD
|
// END FIELD
|
||||||
return (field, false)
|
return (String(fieldBuffer), false)
|
||||||
} else {
|
} else {
|
||||||
field.append(String(c))
|
fieldBuffer.append(c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// END FILE
|
// END FILE
|
||||||
return (field, true)
|
return (String(fieldBuffer), true)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func moveNext() -> UnicodeScalar? {
|
private func moveNext() -> UnicodeScalar? {
|
||||||
|
|
Loading…
Reference in New Issue