Skip to content

Commit 5a2251c

Browse files
committed
Ticket #141: feature request - emit header event
Ticket #198: bug fix - using pipe cause issues.
1 parent 41379c7 commit 5a2251c

5 files changed

Lines changed: 33 additions & 8 deletions

File tree

libs/core/Converter.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ Converter.prototype.processHead = function (fileLine, cb) {
302302
}
303303
var res = linesToJson(lines.lines, params, 0);
304304
// Put the header with the first row
305-
if(res.length > 0) res[0].header = params._headers;
305+
// if(res.length > 0) res[0].header = params._headers;
306306
this.processResult(res);
307307
this.lastIndex += res.length;
308308
this.recordNum += res.length;
@@ -354,7 +354,7 @@ Converter.prototype.processResult = function (result) {
354354

355355
Converter.prototype.emitResult = function (r) {
356356
var index = r.index;
357-
var header = r.header;
357+
var header = this.param;
358358
var row = r.row;
359359
var result = r.json;
360360
var resultJson = null;
@@ -374,8 +374,8 @@ Converter.prototype.emitResult = function (r) {
374374
this.transform(resultJson, row, index);
375375
resultStr = null;
376376
}
377-
if (this._needEmitHeader && header) {
378-
this.emit("header", header);
377+
if (this._needEmitHeader && this.param._headers && index === 0) {
378+
this.emit("header", this.param._headers);
379379
}
380380
if (this._needEmitJson) {
381381
this.emit("json", resultJson, index);

libs/core/rowSplit.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,13 @@ function _escapeQuote(segment, quote, escape) {
119119

120120
var key = "es|" + quote + "|" + escape;
121121
if (cachedRegExp[key] === undefined) {
122-
if (escape === "\\") {
123-
escape = "\\\\";
124-
}
125-
cachedRegExp[key] = new RegExp(escape + quote, 'g');
122+
123+
// if (escape === "\\") {
124+
// escape = "\\\\";
125+
// }
126+
cachedRegExp[key] = new RegExp('\\'+escape + '\\'+quote, 'g');
126127
}
127128
var regExp = cachedRegExp[key];
129+
// console.log(regExp,segment);
128130
return segment.replace(regExp, quote);
129131
}

test/data/pipeAsQuote

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
test,test2,test3
2+
blag,blagh,|blahhh, blah|

test/testCSVConverter2.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,15 +430,23 @@ describe("CSV Converter", function () {
430430

431431
it("should ignore column", function(done) {
432432
var rs = fs.createReadStream(__dirname + "/data/dataWithQoutes");
433+
var headerEmitted=false;
433434
csv({
434435
ignoreColumns:[0]
435436
})
436437
.fromStream(rs)
437438
.on("header", function(header) {
438439
assert.equal(header.indexOf("TIMESTAMP"), -1);
439440
assert.equal(header.indexOf("UPDATE"), 0);
441+
if (headerEmitted){
442+
throw("header event should only happen once")
443+
}
444+
headerEmitted=true;
440445
})
441446
.on("csv", function(row, idx) {
447+
if (!headerEmitted) {
448+
throw("header should be emitted before any data events");
449+
}
442450
assert(idx >= 0);
443451
if (idx ===1){
444452
assert.equal(row[0],"n");
@@ -449,6 +457,7 @@ describe("CSV Converter", function () {
449457
assert(idx >= 0);
450458
})
451459
.on("end", function() {
460+
assert(headerEmitted);
452461
done();
453462
});
454463
});

test/testCSVConverter3.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,16 @@ describe("CSV Converter", function () {
7373
done()
7474
});
7575
})
76+
it("should accept pipe as quote", function (done) {
77+
csv({
78+
quote:"|"
79+
})
80+
.fromFile(__dirname + "/data/pipeAsQuote")
81+
.on('csv', function (csv) {
82+
assert.equal(csv[2],"blahhh, blah");
83+
})
84+
.on('done', function () {
85+
done()
86+
});
87+
})
7688
});

0 commit comments

Comments
 (0)