Code refactoring
This commit is contained in:
parent
58f9399e57
commit
1f2efdfd0f
|
@ -132,9 +132,9 @@ public struct CSV: IteratorProtocol, Sequence {
|
||||||
}
|
}
|
||||||
|
|
||||||
var row = [String]()
|
var row = [String]()
|
||||||
while true {
|
|
||||||
var field: String
|
var field: String
|
||||||
var end: Bool
|
var end: Bool
|
||||||
|
while true {
|
||||||
if next == nil {
|
if next == nil {
|
||||||
(field, end) = ("", true)
|
(field, end) = ("", true)
|
||||||
}
|
}
|
||||||
|
@ -157,60 +157,56 @@ public struct CSV: IteratorProtocol, Sequence {
|
||||||
}
|
}
|
||||||
|
|
||||||
internal mutating func readField(quoted: Bool) -> (String, Bool) {
|
internal mutating func readField(quoted: Bool) -> (String, Bool) {
|
||||||
var next = moveNext()
|
|
||||||
var field = ""
|
var field = ""
|
||||||
|
|
||||||
|
var next = moveNext()
|
||||||
while let c = next {
|
while let c = next {
|
||||||
if quoted {
|
if quoted {
|
||||||
switch c {
|
if c == DQUOTE {
|
||||||
case DQUOTE:
|
let cNext = moveNext()
|
||||||
let n = moveNext()
|
if cNext == nil || cNext == CR || cNext == LF {
|
||||||
if n == nil {
|
if cNext == CR {
|
||||||
|
let cNextNext = moveNext()
|
||||||
|
if cNextNext != LF {
|
||||||
|
back = cNextNext
|
||||||
|
}
|
||||||
|
}
|
||||||
// END ROW
|
// END ROW
|
||||||
return (field, true)
|
return (field, true)
|
||||||
}
|
}
|
||||||
else if n == DQUOTE {
|
else if cNext == delimiter {
|
||||||
// ESC
|
|
||||||
field.append(c)
|
|
||||||
}
|
|
||||||
else if n == delimiter {
|
|
||||||
// END FIELD
|
// END FIELD
|
||||||
return (field, false)
|
return (field, false)
|
||||||
}
|
}
|
||||||
else if n == CR || n == LF {
|
else if cNext == DQUOTE {
|
||||||
if n == CR {
|
// ESC
|
||||||
let nn = moveNext()
|
field.append(DQUOTE)
|
||||||
if nn != LF {
|
|
||||||
back = nn
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// END ROW
|
|
||||||
return (field, true)
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// ERROR??
|
// ERROR??
|
||||||
field.append(c)
|
field.append(c)
|
||||||
}
|
}
|
||||||
default:
|
}
|
||||||
|
else {
|
||||||
field.append(c)
|
field.append(c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
switch c {
|
if c == CR || c == LF {
|
||||||
case CR:
|
if c == CR {
|
||||||
let nn = moveNext()
|
let cNext = moveNext()
|
||||||
if nn != LF {
|
if cNext != LF {
|
||||||
back = nn
|
back = cNext
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// END ROW
|
// END ROW
|
||||||
return (field, true)
|
return (field, true)
|
||||||
case LF:
|
}
|
||||||
// END ROW
|
else if c == delimiter {
|
||||||
return (field, true)
|
|
||||||
case delimiter:
|
|
||||||
// END FIELD
|
// END FIELD
|
||||||
return (field, false)
|
return (field, false)
|
||||||
default:
|
}
|
||||||
|
else {
|
||||||
field.append(c)
|
field.append(c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue