Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Csv reader #21

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
9 changes: 9 additions & 0 deletions csvToJsonReader/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict';

var csvJson = require('./csvToJson');
console.log('starting');
var data = csvJson().readFile('testfile.csv')
console.log(data)

console.log('Asynchronous conversion using streams')
csvJson().readFileAsync('testfile.csv')
77 changes: 77 additions & 0 deletions csvToJsonReader/csvToJson.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
(function () {
var fs = require('fs')
var csvReader = require('fast-csv')

module.exports = function(){

var methods = {};

methods.readFileAsync = function(filename) {
var stream = fs.createReadStream(filename);

var lineNumber = 0;
var headers = {};
var csvString = '';
csvReader.fromStream(stream)
.transform(function(data) {
if(lineNumber === 0) {
headers = data.map(function(d) {
return d.trim();
});
lineNumber++;
return;
}

lineNumber++;

var line = data.map(function(d) {
return d.trim();
})
csvString = csvString + ' ' + methods.csvJsonLine(line, headers);
console.log(csvString);
})
.on('data', function(data) {
//console.log(data);
})
.on('end', function() {
console.log('done');
});
};

methods.csvJsonLine = function(csvLine, headers) {
var obj = {};

for(var j = 0; j < headers.length; j++) {
obj[headers[j]] = csvLine[j];
}

return JSON.stringify(obj);
};

methods.readFile = function(filename) {
var buffer = fs.readFileSync(filename);

var lines = buffer.toString().split('\n');

var headers = lines[0].split(',').map(function(d) {
return d.replace(/[\r]/g, '').trim();
});

var numberOfLines = lines.length;
var objArray = [];

for(var j = 1; j < numberOfLines; j++) {
var line = lines[j].split(',').map(function(d) {
return d.replace(/[\r]/g, '').trim();
});
var jsonObj = methods.csvJsonLine(line, headers);
objArray.push(jsonObj);
}

return objArray;
}

return methods;
};

}());
3 changes: 3 additions & 0 deletions csvToJsonReader/testfile.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
header1, header2, header3
one, two, three
four, five, six
13 changes: 13 additions & 0 deletions csvToJsonReader/tests/testcsvJsonLine.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
var test = require('tape')
var csvJson = require('../csvToJson')

test('oneLineFile', function (t) {
var headers = ['header1', 'header2']
var line = ['one', 'two']

var result = csvJson().csvJsonLine(line, headers)

t.equal(result, '{"header1":"one","header2":"two"}')

t.end()
})
9 changes: 9 additions & 0 deletions csvToJsonReader/tests/testreadFile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
var test = require('tape');
var csvJson = require('../csvToJson');

test('simpleFile', function(t) {
var expectedResult = ['{"header1":"one","header2":"two","header3":"three"}','{"header1":"four","header2":"five","header3":"six"}'];
var result = csvJson().readFile('./csvToJsonReader/testfile.csv');
t.deepEqual(result, expectedResult);
t.end();
});
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"description": "Tabular Data support for Dat/hypercore",
"main": "index.js",
"scripts": {
"test": "standard && tape test/*.js"
"test": "tape csvToJsonReader/tests/*.js"
},
"repository": {
"type": "git",
Expand All @@ -25,6 +25,7 @@
},
"devDependencies": {
"standard": "^6.0.5",
"tape": "^4.4.0"
"tape": "^4.5.0",
"fast-csv": "^1.0.0"
}
}