diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.html b/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.html index d24db5267..f7e4e3ba2 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.html +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.html @@ -30,7 +30,9 @@ - + + + @@ -71,7 +73,8 @@ multi: {value:"one",required:true}, ret: {value:'\\n'}, temp: {value:""}, - skip: {value:"0"} + skip: {value:"0"}, + strings: {value:true} }, inputs:1, outputs:1, @@ -83,7 +86,7 @@ return this.name?"node_label_italic":""; }, oneditprepare: function() { - console.log(this.skip,$("#node-input-skip").val()); + if (this.strings === undefined) { this.strings = true; $("#node-input-strings").prop('checked', true); } if (this.skip === undefined) { this.skip = 0; $("#node-input-skip").val("0");} $("#node-input-skip").spinner({ min:0 }); if (this.sep == "," || this.sep == "\\t" || this.sep == ";" || this.sep == ":" || this.sep == " " || this.sep == "#") { diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.js b/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.js index 34b167bb7..e8a45a535 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.js @@ -30,6 +30,8 @@ module.exports = function(RED) { this.goodtmpl = true; this.skip = parseInt(n.skip || 0); this.store = []; + this.parsestrings = n.strings; + if (this.parsestrings === undefined) { this.parsestrings = true; } var tmpwarn = true; var node = this; @@ -172,7 +174,7 @@ module.exports = function(RED) { else if ((line[i] === node.sep) && f) { // if it is the end of the line then finish if (!node.goodtmpl) { node.template[j] = "col"+(j+1); } if ( node.template[j] && (node.template[j] !== "") && (k[j] !== "" ) ) { - if ( reg.test(k[j]) ) { k[j] = parseFloat(k[j]); } + if ( (node.parsestrings === true) && reg.test(k[j]) ) { k[j] = parseFloat(k[j]); } o[node.template[j]] = k[j]; } j += 1; @@ -182,7 +184,7 @@ module.exports = function(RED) { //console.log(j,k,o,k[j]); if (!node.goodtmpl) { node.template[j] = "col"+(j+1); } if ( node.template[j] && (node.template[j] !== "") && (k[j] !== "") ) { - if ( reg.test(k[j]) ) { k[j] = parseFloat(k[j]); } + if ( (node.parsestrings === true) && reg.test(k[j]) ) { k[j] = parseFloat(k[j]); } else { k[j].replace(/\r$/,''); } o[node.template[j]] = k[j]; } @@ -203,7 +205,7 @@ module.exports = function(RED) { //console.log(j,k,o,k[j]); if (!node.goodtmpl) { node.template[j] = "col"+(j+1); } if ( node.template[j] && (node.template[j] !== "") && (k[j] !== "") ) { - if ( reg.test(k[j]) ) { k[j] = parseFloat(k[j]); } + if ( (node.parsestrings === true) && reg.test(k[j]) ) { k[j] = parseFloat(k[j]); } else { k[j].replace(/\r$/,''); } o[node.template[j]] = k[j]; } diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json index 82e466fdb..275ab3c9b 100755 --- a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json @@ -694,7 +694,8 @@ "firstrow": "first row contains column names", "output": "Output", "includerow": "include column name row", - "newline": "Newline" + "newline": "Newline", + "usestrings": "parse numerical values" }, "placeholder": { "columns": "comma-separated column names" diff --git a/test/nodes/core/parsers/70-CSV_spec.js b/test/nodes/core/parsers/70-CSV_spec.js index f58e76644..f46afc24a 100644 --- a/test/nodes/core/parsers/70-CSV_spec.js +++ b/test/nodes/core/parsers/70-CSV_spec.js @@ -148,6 +148,22 @@ describe('CSV node', function() { }); }); + it('should not parse numbers when told not to do so', function(done) { + var flow = [ { id:"n1", type:"csv", temp:"a,b,c,d,e,f,g", strings:false, wires:[["n2"]] }, + {id:"n2", type:"helper"} ]; + helper.load(csvNode, flow, function() { + var n1 = helper.getNode("n1"); + var n2 = helper.getNode("n2"); + n2.on("input", function(msg) { + msg.should.have.property('payload', { a: "1.23", b: "0123", c: "+123", d: "e123", e: "0", f: "-123", g: "1e3" }); + check_parts(msg, 0, 1); + done(); + }); + var testString = '1.23,0123,+123,e123,0,-123,1e3'+String.fromCharCode(10); + n1.emit("input", {payload:testString}); + }); + }); + it('should leave handle strings with scientific notation as numbers', function(done) { var flow = [ { id:"n1", type:"csv", temp:"a,b,c,d,e,f,g", wires:[["n2"]] }, {id:"n2", type:"helper"} ];