-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupload.js
100 lines (88 loc) · 2.78 KB
/
upload.js
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
var fs = require('fs');
var internals = {};
internals.getHeaders = function(headerData,delimiter){
//split the first line of data after \n
var headers = headerData.split('\n')[0];
var headerValueArr = headers.split(delimiter);
//return array of headers.
return headerValueArr;
};
internals.combineData = function(header,rawData,delimiter,headValue,finalData){
//store data in result object.
var result = {};
//split the data afte , and return a array.
var bodyData = rawData.split(delimiter);
// check if header value is true, if true then set limit to haeder length.
if(headValue){
limit = header.length;
} else {
//if header value is false, set limit to bodyData length
limit = bodyData.length;
}
for(var i=0;i < limit;i++){
if(headValue){
//maping header with body data with header option is true.
result[header[i]]=bodyData[i];
} else {
//maping body data if header option is false.
result[i] = bodyData[i];
}
}
//pushing result object into array.
finalData.push(result);
};
internals.setLimit = function(limit,rawData){
if(limit){
limit = limit+1;
} else {
limit = rawData.length-1;
}
return limit;
};
internals.skipRows =function(skipEmpty,data,rawData){
var rawData =[];
if(skipEmpty){
data = data.replace(/\s+,/, "");
rawData = data.split('\n');
} else {
rawData = data.split('\n');
}
return rawData;
};
internals.csvToJson = function(path,options){
var limit = options.limit;
var delimiter = options.delimiter || ',';
var headValue = options.header || true;
var skipEmpty = options.skipEmpty;
var headersType = options.headersType;
var readbleStream = fs.createReadStream(path);
var data = '';
var finalData=[];
readbleStream.setEncoding('utf8');
readbleStream.on('data',function(chunk){
data += chunk;
});
readbleStream.on('end',function(){
//skip blanck rows
var rawData = internals.skipRows(skipEmpty,data,rawData);
// check data limit
var setLimit = internals.setLimit(limit,rawData);
for(var i =1 ;i<setLimit;i++){
//check headvale from options true||false
if(headValue)
{
// extract headers from entire data.
var header = internals.getHeaders(data,delimiter);
} else {
//if header is false send balnk array.
header = [];
}
//create a object maping heades to data
var formatedData= internals.combineData(header,rawData[i],delimiter,headValue,finalData);
};
//return finalData
return finalData;
//console.log(finalData);
});
};
module.exports = internals;