Add support to handle possible EOF without previous \n or \r\n - csvtofsv - Convert CSV to FSV (`fs' (0x1c) as FS and `rs' (0x1e) as RS)
(HTM) hg clone https://bitbucket.org/iamleot/csvtofsv
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) changeset d8177ac6bcc6201a347f094e2128370f107b78ad
(DIR) parent 477d355c259932e82ee1d6b659d895ec7f188e00
(HTM) Author: Leonardo Taccari <iamleot@gmail.com>
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;
}