'use strict'; function parseAccount(str) { // str will look like: 'KONTO 1010 "Balanserade utgifter"' const [, number, ...name] = str.split(/\s+/); return { number: parseInt(number, 10), name: name.join(' ').slice(1, -1), }; } const accountType = { T: 1, S: 2, I: 3, K: 4, }; function parseCompanyName(str) { const [, name] = str.split(/\s+/); return name.slice(1, -1); } // str should be `ORGNR "556930-1673"` function parseOrganizationNumber(str) { const [, number] = str.split(/\s+/); return number.slice(1, -1); } function parseYearDates(str) { const [, current, start, end] = str.split(/\s+/); return { start: parseDate(start), end: parseDate(end), current: current === '0', }; } function parseAccountType(str) { const [, number, type] = str.split(/\s+/); return { number: parseInt(number, 10), type: accountType[type], }; } function parseDate(str) { const [, year, month, day] = /(\d\d\d\d)(\d\d)(\d\d)/.exec(str); return new Date(`${year}-${month}-${day}T00:00:00.000Z`); } function parseSRU(str) { const [, number, sru] = str.split(/\s+/); return { number: parseInt(number, 10), sru: parseInt(sru, 10), }; } function parseTransaction(str) { // str looks like: ' #TRANS 6310 {} 1541.00 20150824 ' const [, accountNumber,, amount] = str.split(/\s+/); return { accountNumber: parseInt(accountNumber, 10), amount: parseFloat(amount), }; } function parseTicket(str) { const [, type, number, date, ...rest] = str.split(/\s+/); const dateCreated = rest.pop(); const title = rest.join(' '); return { type: parseInt(type, 10), number: parseInt(number, 10), date: parseDate(date), date_created: parseDate(dateCreated), title: title.slice(1, -1), }; } module.exports = { parseAccountType, parseAccount, parseCompanyName, parseOrganizationNumber, parseSRU, parseTransaction, parseTicket, parseYearDates, }; // console.log(string.split('\n#').length) // module.exports = function parseLine(line) { // line = line.slice(1); // if (line.startsWith('KONTO')) { // const account = parseAccount(line); // } else if (line.startWith('KTYP') { // const accountType = parseAccountType(line); // } // const accounts = []; // const tickets = []; // string.split(/\n#/g).forEach((str, i) => { // if (str.startsWith('KONTO')) { // accounts.push(parseAccount(str)); // } else if (str.startsWith('KTYP')) { // const { number, type } = parseAccountType(str); // // const string = fs.readFileSync('./bitmill2015.se', { encoding: 'UTF8' }); // const account = accounts.find((account) => account.number === number); // account.type = type; // } else if (str.startsWith('VER')) { // tickets.push(parseTicket(str)); // } // }); // return { // accounts, // tickets, // }; //}; // console.log(tickets); // process.exit(0);