Code refactoring

This commit is contained in:
Yasuhiro Hatta 2016-06-22 01:09:53 +09:00
parent 58f9399e57
commit 1f2efdfd0f
1 changed files with 31 additions and 35 deletions

View File

@ -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)
} }
} }