input/csv: trim cell content before conversion
authorGerhard Sittig <gerhard.sittig@gmx.net>
Sun, 4 Oct 2020 17:48:42 +0000 (19:48 +0200)
committerGerhard Sittig <gerhard.sittig@gmx.net>
Sun, 4 Oct 2020 18:00:16 +0000 (20:00 +0200)
Trailing whitespace in CSV cells broke the text to number conversion.
Trim the text content of cells before processing it. This is useful and
actually essential for data cells, and does not harm titles in header
lines, neither will it affect column format specs.

How to reproduce:

  $ echo ' 3.14 , 2' | \
    sigrok-cli -i - -I csv:header=false:column_formats=2a
  sr: input/csv: Cannot parse analog text  3.14  in column 1 in line 1.

src/input/csv.c

index 1c4a5d7f16c8f7e18e063554a23ebccdb564c8f6..66cf4bb3c2445af3ad9c8c3c1be36e2d658b03d4 100644 (file)
@@ -756,7 +756,20 @@ static void strip_comment(char *buf, const GString *prefix)
  */
 static char **split_line(char *buf, struct context *inc)
 {
-       return g_strsplit(buf, inc->delimiter->str, 0);
+       char **fields, *f;
+       size_t l;
+
+       fields = g_strsplit(buf, inc->delimiter->str, 0);
+       if (!fields)
+               return NULL;
+
+       l = g_strv_length(fields);
+       while (l--) {
+               f = fields[l];
+               g_strchomp(f);
+       }
+
+       return fields;
 }
 
 /**