diff options
| author | Franklin Wei <git@fwei.tk> | 2015-05-18 19:38:13 -0400 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2015-05-18 19:38:13 -0400 |
| commit | f5c7e492d8d6b7b4fa1298342ea6157bd2ada564 (patch) | |
| tree | cbfc8b7c5e5dfce6aac62b49f5cc50735da38663 /src/csv.c | |
| parent | 9b9697747aa55651680b196d4930203ef15d1c47 (diff) | |
| download | market-sim-f5c7e492d8d6b7b4fa1298342ea6157bd2ada564.zip market-sim-f5c7e492d8d6b7b4fa1298342ea6157bd2ada564.tar.gz market-sim-f5c7e492d8d6b7b4fa1298342ea6157bd2ada564.tar.bz2 market-sim-f5c7e492d8d6b7b4fa1298342ea6157bd2ada564.tar.xz | |
refactor csv parsing
Diffstat (limited to 'src/csv.c')
| -rw-r--r-- | src/csv.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/csv.c b/src/csv.c new file mode 100644 index 0000000..907065e --- /dev/null +++ b/src/csv.c @@ -0,0 +1,38 @@ +#include "globals.h" + +char *csv_read(char **ptr) +{ + if(!ptr) + return NULL; + + char *start = *ptr; + bool quoted = false; + + while(**ptr) + { + char c = **ptr; + + if(c == '"') + { + quoted = !quoted; + } + + else if((c == ',' && !quoted) || + c == '\0' || + c == '\n') + { + char *ret = malloc(*ptr - start + 1); + ret[*ptr - start] = '\0'; + memcpy(ret, start, *ptr - start); + (*ptr)++; + + return ret; + } + + (*ptr)++; + } + + /* shouldn't get here */ + assert(false); + return NULL; +} |