diff --git a/app/index.html b/app/index.html index 63e1d9ef..d500f700 100644 --- a/app/index.html +++ b/app/index.html @@ -141,6 +141,13 @@ +
+ +
+ +
+
+
diff --git a/app/js/app.js b/app/js/app.js index b5ef942d..926d19b5 100755 --- a/app/js/app.js +++ b/app/js/app.js @@ -128,6 +128,7 @@ var ExplorerApp = Backbone.View.extend({ var file = $file.files[0]; var options = { separator : $form.find('input[name="separator"]').val(), + delimiter : $form.find('input[name="delimiter"]').val(), encoding : $form.find('input[name="encoding"]').val() }; recline.Backend.loadFromCSVFile(file, function(dataset) { diff --git a/src/backend/localcsv.js b/src/backend/localcsv.js index e5a6bdec..d1969fa2 100644 --- a/src/backend/localcsv.js +++ b/src/backend/localcsv.js @@ -58,7 +58,9 @@ this.recline.Backend = this.recline.Backend || {}; var options = options || {}; var trm = options.trim; var separator = options.separator || ','; - + var delimiter = options.delimiter || '"'; + + var cur = '', // The character we are currently processing. inQuote = false, fieldQuoted = false, @@ -105,8 +107,8 @@ this.recline.Backend = this.recline.Backend || {}; field = ''; fieldQuoted = false; } else { - // If it's not a ", add it to the field buffer - if (cur !== '"') { + // If it's not a delimiter, add it to the field buffer + if (cur !== delimiter) { field += cur; } else { if (!inQuote) { @@ -114,9 +116,9 @@ this.recline.Backend = this.recline.Backend || {}; inQuote = true; fieldQuoted = true; } else { - // Next char is ", this is an escaped " - if (s.charAt(i + 1) === '"') { - field += '"'; + // Next char is delimiter, this is an escaped delimiter + if (s.charAt(i + 1) === delimiter) { + field += delimiter; // Skip the next char i += 1; } else { diff --git a/test/backend.localcsv.test.js b/test/backend.localcsv.test.js index bc2f2738..8325e549 100644 --- a/test/backend.localcsv.test.js +++ b/test/backend.localcsv.test.js @@ -1,7 +1,7 @@ (function ($) { module("Backend Local CSV"); -test("parseCSV", function() { +test("parseCSV", function() { var csv = '"Jones, Jay",10\n' + '"Xyz ""ABC"" O\'Brien",11:35\n' + '"Other, AN",12:35\n'; @@ -29,7 +29,7 @@ test("parseCSV", function() { equal(dataset.currentDocuments.length, 3); }); -test("parseCSVsemicolon", function() { +test("parseCSVsemicolon", function() { var csv = '"Jones; Jay";10\n' + '"Xyz ""ABC"" O\'Brien";11:35\n' + '"Other; AN";12:35\n'; @@ -44,4 +44,20 @@ test("parseCSVsemicolon", function() { }); +test("parseCSVdelimiter", function() { + var csv = "'Jones, Jay',10\n" + + "'Xyz \"ABC\" O''Brien',11:35\n" + + "'Other; AN',12:35\n"; + + var array = recline.Backend.parseCSV(csv, {delimiter:"'"}); + var exp = [ + ["Jones, Jay", 10], + ["Xyz \"ABC\" O'Brien", "11:35" ], + ["Other; AN", "12:35" ] + ]; + deepEqual(exp, array); + +}); + + })(this.jQuery);