I admit I found it interesting to create the code for this:
const fs = require('fs');
const readline = require('readline');
const registroRegex = /(\|.*\|)+/g;
const dados = [];
let linhaAtual = 0;
let indices = null;
// Criando a interface para ler linha por linha
const rl = readline.createInterface({
input: fs.createReadStream('meu_txt.txt', 'utf8'),
crlfDelay: Infinity,
});
// Extrair os dados referentes a uma linha
function extrairDados(linha) {
const dadosAtuais = [];
let dado = '';
for (let i = 0; i < linha.length; i += 1) {
if (i !== 0 && linha[i] !== '|') {
dado += linha[i];
} else {
// Remover os espaços extras em cada extremidade
dado = dado.trim();
dadosAtuais.push(dado);
dado = '';
}
}
return dadosAtuais;
}
// Usar a interface criada anteriormente para ler as linhas
rl.on('line', (linha) => {
// Antes de tudo, garantir que a linha se trata de um registro
if (linhaAtual > 2 && linha.match(registroRegex)) {
if (indices === null) {
indices = extrairDados(linha);
} else {
const dadoAtual = [];
const coluna = extrairDados(linha);
for (let i = 0; i < indices.length; i += 1) {
dadoAtual.push({
[indices[i]]: coluna[i],
});
}
dados.push(dadoAtual);
}
}
linhaAtual += 1;
}).on('close', () => {
// Aqui temos o objeto final, com todos os dados
console.log(dados);
});
Examples of entries:
-------------------------------------
| TABELA |
-------------------------------------
| ID | NOME | CARGO |
| 1 | LUCIUS | SENIOR |
| 2 | GABRIEL | FRONTEND|
-------------------------------------
--------
|TABELA|
---------------
|ID|NOME|CARGO|
|1|LUCIUS|SENIOR|
|2|GABRIEL|FRONTEND|
--------------------
-------------------------------------
| TABELA |
-------------------------------------
|ID|NOME|CARGO|
| 1 |LUCIUS| SENIOR |
| 2 | GABRIEL | FRONTEND|
-------------------------------------
Exit:
[
[ { ID: '1' }, { NOME: 'LUCIUS' }, { CARGO: 'SENIOR' } ],
[ { ID: '2' }, { NOME: 'GABRIEL' }, { CARGO: 'FRONTEND' } ]
]