I’m new to Node, and I have a text file that has data like this
JavaScript
x
6
1
Date Open High Low Close Volume
2
11-Jun-19 163.3 164.54 162.74 163.1 158470476
3
10-Jun-19 165.31 165.4 164.37 164.8 105667060
4
7-Jun-19 163.85 164.95 163.14 164.8 188337725
5
6
I would like to create an array of objects like this
JavaScript
1
23
23
1
[{
2
Date: "11-Jun-19",
3
Open: 163.22,
4
High: 164.28,
5
Low: 163.05,
6
Close: 163.88,
7
Volume: 5854647
8
}, {
9
Date: "12-Jun-19",
10
Open: 163.22,
11
High: 164.28,
12
Low: 163.05,
13
Close: 163.88,
14
Volume: 5854647
15
}, {
16
Date: "15-Jun-19",
17
Open: 163.22,
18
High: 164.28,
19
Low: 163.05,
20
Close: 163.88,
21
Volume: 5854647
22
}]
23
How can I do this? This was my attempt:
JavaScript
1
19
19
1
const lineReader = require('line-reader');
2
3
lineReader.eachLine('input.txt', function (line) {
4
let results = [];
5
let divide = line.split(" ");
6
for (let i = 0; i < divide.length; i++) {
7
let field = divide[i].split("/t");
8
results.push({
9
date: field[0],
10
open: field[1],
11
high: field[2],
12
low: field[3],
13
close: field[4],
14
volume: field[5]
15
});
16
}
17
console.log(results);
18
});
19
But this create an array for each object and I get all the data showing under date
like this:
JavaScript
1
22
22
1
[
2
{
3
date: '11-Jun-19t163.3t164.54t162.74t163.1t158470476',
4
open: undefined,
5
high: undefined,
6
low: undefined,
7
close: undefined,
8
volume: undefined
9
}
10
]
11
[
12
{
13
date: '10-Jun-19t165.31t165.4t164.37t164.8t105667060',
14
open: undefined,
15
high: undefined,
16
low: undefined,
17
close: undefined,
18
volume: undefined
19
}
20
]
21
22
Advertisement
Answer
You can try readline
internal module, by the way (see this example), if your file is big and you do need line by line processing:
JavaScript
1
39
39
1
const fs = require('fs');
2
const readline = require('readline');
3
4
async function processLineByLine() {
5
const fileStream = fs.createReadStream('test.txt');
6
7
const rl = readline.createInterface({
8
input: fileStream,
9
crlfDelay: Infinity,
10
});
11
12
let headers = null;
13
const data = [];
14
15
for await (const line of rl) {
16
const row = line.split(/s+/);
17
18
if (headers === null) { // So this is the first line.
19
headers = row;
20
} else {
21
const entry = {};
22
for (let i = 0; i < row.length; i++) {
23
const header = headers[i];
24
const cell = row[i];
25
26
entry[header] = header === 'Date' ? cell : Number(cell);
27
// Or more generally:
28
// const mayBeNumber = Number(cell);
29
// entry[header] = Number.isNaN(mayBeNumber) ? cell : mayBeNumber;
30
}
31
data.push(entry);
32
}
33
}
34
35
console.log(data);
36
}
37
38
processLineByLine();
39