X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=extras%2FCSVParser.ec;h=38fc5cec19b7c2f62e40951ebd5add3b82d04b55;hb=HEAD;hp=87f9db373bb93a60fb3c84366fa6c5d68eb44a7a;hpb=43de65312059b555cc1224d0a6152ceefd3ccc90;p=sdk diff --git a/extras/CSVParser.ec b/extras/CSVParser.ec index 87f9db3..38fc5ce 100644 --- a/extras/CSVParser.ec +++ b/extras/CSVParser.ec @@ -138,10 +138,15 @@ public: if(!inTextQuote && !escaped && ch == options.valueQuotes) { - quoted = false; - end = c; + if(buffer[c+1] == options.valueQuotes) + c++; + else + { + quoted = false; + end = c; + } } - if(options.escaped && ch == '\\') + if(!escaped && options.escaped && ch == '\\') escaped = true; else escaped = false; @@ -162,12 +167,19 @@ public: { int len = started ? (end-start) : 0; String value = new char[len+1]; - if(options.escaped) + if(options.escaped) // Escaped with a backslash UnescapeString(value, &buffer[start], len); else { + String dq; memcpy(value, &buffer[start], len); value[len] = 0; + while((dq = strstr(value, "\"\""))) + { + memmove(dq + 1, dq + 2, len - (uint)(dq + 2 - value) + 1); + len--; + value[len] = 0; + } } values.Add(value); } @@ -209,8 +221,15 @@ public: UnescapeString(value, &buffer[start], len); else { + String dq; memcpy(value, &buffer[start], len); value[len] = 0; + while((dq = strstr(value, "\"\""))) + { + memmove(dq + 1, dq + 2, len - (uint)(dq + 2 - value) + 1); + len--; + value[len] = 0; + } } values.Add(value); }