diff options
Diffstat (limited to 'stream.c')
-rw-r--r-- | stream.c | 45 |
1 files changed, 26 insertions, 19 deletions
@@ -5443,55 +5443,62 @@ val get_csv(val source_opt) ch = ch2; else if (ch2) unget_char(ch2, source); + } else if (ch == nil) { + vec_push(record, field); + break; } switch (state) { case rfield: - if (ch == chr('\n')) { + switch (c_chr(ch)) { + case '\n': vec_push(record, field); done = 1; - } else if (ch == chr(',')) { + break; + case ',': vec_push(record, field); field = mkstring(zero, chr(' ')); - } else if (ch == chr('"')) { + break; + case '"': if (empty(field)) state = qfield; else string_extend(field, ch, nil); - } else if (ch == nil) { - vec_push(record, field); - done = 1; - } else { + break; + default: string_extend(field, ch, nil); + break; } break; case qfield: - if (ch == chr('"')) { + switch (c_chr(ch)) { + case '"': state = quot; - } else if (ch == nil) { - vec_push(record, field); - done = 1; - } else { + break; + default: string_extend(field, ch, nil); + break; } break; case quot: - if (ch == chr(',')) { + switch (c_chr(ch)) { + case ',': vec_push(record, field); field = mkstring(zero, chr(' ')); state = rfield; - } else if (ch == chr('"')) { + break; + case '"': string_extend(field, ch, nil); state = qfield; - } else if (ch == chr('\n')) { - vec_push(record, field); - done = 1; - } else if (ch == nil) { + break; + case '\n': vec_push(record, field); done = 1; - } else { + break; + default: string_extend(field, ch, nil); state = rfield; + break; } } } |