-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgetDataFromFile.js
More file actions
55 lines (47 loc) · 1.44 KB
/
getDataFromFile.js
File metadata and controls
55 lines (47 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const readline = require('readline');
const fs = require('fs');
const getDataObject = (fileName, callback) => {
const reader = readline.createInterface({
input: fs.createReadStream(fileName)
});
// array of headers
let headers = [];
// array with whole data
const data = [];
let lineNumber = 0;
reader.on('line', line => {
if (lineNumber == 0) {
// generate headers from the first line of file
headers = generatePropertyArray(line);
lineNumber++;
return;
}
const splittedLine = line.split(',');
// after that, just populate the data array
if (splittedLine.length == headers.length) {
const lineData = {}
headers.forEach((header, index) => {
lineData[header] = splittedLine[index];
});
data.push(lineData);
}
lineNumber++;
});
reader.on('close', line => {
callback(data);
});
}
const generatePropertyArray = headerLine => {
const headers = headerLine.split(',');
const headerArray = [];
headers.forEach(header => {
headerArray.push(getHeaderName(header));
});
return headerArray;
}
const getHeaderName = header => {
const splittedHeader = header.split(' ');
splittedHeader[0] = splittedHeader[0].toLowerCase();
return splittedHeader.join('').trim();
}
module.exports = getDataObject;