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);