MattSandy
4/3/2018 - 8:36 PM

Chase Statement PDF to CSV

Chase Statement PDF to CSV

var pdfText = require('pdf-text');
var fs = require('fs');
var aggregate = {};
var merchant = "";
var amount = 0;
//clear export.csv and write heading
fs.writeFile('export.csv', 'Date,Merchant,Amount\n', function(){console.log('export.csv cleared')});
pdfText("statement.pdf", function (err, chunks) {
    for (var i = 0; i < chunks.length; i++) {
        //finds the dates
        if (chunks[i].match(/([0-9]{1,2}\/[0-9]{1,2}\/[0-9]{1,2})/mg) == chunks[i]) {
            merchant =  chunks[i+1];
            amount = parseFloat(chunks[i+2]);
            if(aggregate.hasOwnProperty(merchant)) {
                //adds amount to existing merchant
                aggregate[merchant] = aggregate[merchant] + amount;
            } else {
                //new merchant
                aggregate[merchant] = amount;
            }

            //line for export.csv
            var line = '"' + chunks[i] + '","' + merchant + '","' + amount + '"\n';
            fs.appendFile('export.csv', line, function (err) {
                if (err) throw err;
            });
        }
    }
    console.log(aggregate);
    //save aggregate
    fs.writeFile('aggregate.csv', 'Merchant,Amount\n', function() {
        console.log('aggregate.csv cleared');
        Object.getOwnPropertyNames(aggregate).forEach(function(merchant) {
            var line = '"' + merchant + '","' + aggregate[merchant] + '"\n';
            fs.appendFile('aggregate.csv', line, function (err) {
                if (err) throw err;
            });
        });
    });

});