Add support to handle possible EOF without previous \n or \r\n - csvtofsv - Con… | |
hg clone https://bitbucket.org/iamleot/csvtofsv | |
Log | |
Files | |
Refs | |
README | |
--- | |
changeset d8177ac6bcc6201a347f094e2128370f107b78ad | |
parent 477d355c259932e82ee1d6b659d895ec7f188e00 | |
Author: Leonardo Taccari <[email protected]> | |
Date: Wed, 26 Jun 2019 01:23:11 | |
Add support to handle possible EOF without previous \n or \r\n | |
Diffstat: | |
TODO.txt | 1 - | |
csvtofsv.c | 8 +++++++- | |
2 files changed, 7 insertions(+), 2 deletions(-) | |
--- | |
diff -r 477d355c2599 -r d8177ac6bcc6 TODO.txt | |
--- a/TODO.txt Wed Jun 26 01:21:39 2019 +0200 | |
+++ b/TODO.txt Wed Jun 26 01:23:11 2019 +0200 | |
@@ -1,5 +1,4 @@ | |
Possible known todo and parsing mistakes: | |
- `\r' should be always ignored | |
-- Trailing EOF without a `\n' or `\r\n' is not gracefully handled | |
- Add more tests and recheck RFC 4180 | |
diff -r 477d355c2599 -r d8177ac6bcc6 csvtofsv.c | |
--- a/csvtofsv.c Wed Jun 26 01:21:39 2019 +0200 | |
+++ b/csvtofsv.c Wed Jun 26 01:23:11 2019 +0200 | |
@@ -35,12 +35,14 @@ | |
int | |
main(int argc, char *argv[]) | |
{ | |
- int c, nc; | |
+ int c, nc, pc; | |
bool first, quoted; | |
first = true; | |
quoted = false; | |
+ pc = '\0'; | |
while ((c = getchar()) != EOF) { | |
+ pc = c; | |
switch (c) { | |
case '"': | |
if (first) { | |
@@ -49,6 +51,7 @@ | |
} else if (!quoted) { | |
putchar(c); | |
} else if ((nc = getchar()) != EOF) { | |
+ pc = nc; | |
if (nc == '"') { | |
putchar('"'); | |
} else if (nc == ',') { | |
@@ -95,5 +98,8 @@ | |
} | |
} | |
+ if (pc != '\0' && pc != '\n') | |
+ putchar(RS); | |
+ | |
return 0; | |
} |