diff --git a/csv.cpp b/csv.cpp index 678c6049..5e9a9d74 100644 --- a/csv.cpp +++ b/csv.cpp @@ -92,3 +92,62 @@ void readcsv(char *fn, std::vector &header, std::map= '0' && c <= '9')) { + if (c == '-') { + c = *(cp++); + } + + if (c == '0') { + ; + } else if (c >= '1' && c <= '9') { + c = *cp; + + while (c >= '0' && c <= '9') { + cp++; + c = *cp; + } + } + + if (*cp == '.') { + cp++; + + c = *cp; + if (c < '0' || c > '9') { + return false; + } + while (c >= '0' && c <= '9') { + cp++; + c = *cp; + } + } + + c = *cp; + if (c == 'e' || c == 'E') { + cp++; + + c = *cp; + if (c == '+' || c == '-') { + cp++; + } + + c = *cp; + if (c < '0' || c > '9') { + return false; + } + while (c >= '0' && c <= '9') { + cp++; + c = *cp; + } + } + + return true; + } + + return false; +} diff --git a/csv.hpp b/csv.hpp index b9fd8c93..77a616ff 100644 --- a/csv.hpp +++ b/csv.hpp @@ -10,5 +10,7 @@ std::vector csv_split(char *s); std::string csv_dequote(std::string s); void readcsv(char *fn, std::vector &header, std::map> &mapping); +std::string csv_getline(FILE *f); +bool is_number(std::string const &s); #endif diff --git a/tile-join.cpp b/tile-join.cpp index 235ac29a..e52b1908 100644 --- a/tile-join.cpp +++ b/tile-join.cpp @@ -213,7 +213,7 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map 0) { if (joinval[0] == '"') { joinval = csv_dequote(joinval); - } else if ((joinval[0] >= '0' && joinval[0] <= '9') || joinval[0] == '-') { + } else if (is_number(joinval)) { attr_type = mvt_double; } }