假設你正在使用V0.4或更高版本與新的重構(即CSV-產生,CSV,解析,流轉換和CSV-字符串化),可以使用內置的變換,跳過第一行,做一些額外的工作。
var fs = require('fs'),
csv = require('csv');
var skipHeader = true; // config option
var read = fs.createReadStream('in.csv'),
write = fs.createWriteStream('out.jsonish'),
parse = csv.parse(),
rowCount = 0, // to keep track of where we are
transform = csv.transform(function(row,cb) {
var result;
if (skipHeader && rowCount === 0) { // if the option is turned on and this is the first line
result = null; // pass null to cb to skip
} else {
result = JSON.stringify(row)+'\n'; // otherwise apply the transform however you want
}
rowCount++; // next time we're not at the first line anymore
cb(null,result); // let node-csv know we're done transforming
});
read
.pipe(parse)
.pipe(transform)
.pipe(write).once('finish',function() {
// done
});
本質上講,我們跟蹤已經轉化的行數,如果我們在最前面的一個(和我們,其實希望通過skipHeader
布爾忽略標題),然後傳遞null
回調作爲第二個參數(第一個總是錯誤),否則傳遞轉換後的結果。
這也適用於同步解析,但需要更改,因爲在同步模式下沒有回調。而且,同樣的邏輯可以應用於較舊的v0.2庫,因爲它也具有內置的行轉換。
見http://csv.adaltas.com/transform/#skipping-and-creating-records
這是很容易申請,並IMO具有相當低的足跡。通常情況下,您希望跟蹤出於狀態目的而處理的行,並且在將結果集發送到Writable之前,我幾乎總是轉換結果集,因此只需添加額外的邏輯來檢查跳過標頭就非常簡單。這裏額外的好處是,我們使用相同的模塊來應用跳過邏輯,因爲我們要解析/轉換 - 不需要額外的依賴關係。
對此有何好運?我正在使用相同的庫,並且具有相同的問題。 – ac360