#' Functions to load data from banks
#'
#' @details This functions are adjusted \code{\link[utils]{read.table}} function
#' to load specific CSV files generated by various banks. Banks currently supported:
#' \itemize{
#' \item{mBank}{\code{mbank}}
#' \item{Idea Bank}{\code{idea}}
#' }
#'
#' @param file path to file with transaction data
#' @param bank character with bank name, see Details for supported banks
#' @param ... optional arguments passed to \code{\link[utils]{read.table}}
#'
#' @author Daniel Rodak
#' @importFrom utils maintainer
#' @export
readBank <- function(file, bank, ...) {
if(!(bank %in% CNSTsupportedBanks)) {
stop(bank, " is not supported. Contact with ", maintainer("budgetr"))
}
read.fun <- switch(
bank,
mbank = readMbank,
idea = readIdea)
return(read.fun(file, ...))
}
#' @importFrom utils read.table
readMbank <- function(file, ...) {
callArgs <- as.list(match.call())
if (is.null(callArgs$encoding)) {
if (.Platform$OS.type == 'unix')
enc <- 'latin1'
else
enc <- 'unknown'
} else {
enc <- callArgs$encoding
}
tbl <- read.table(file, header = TRUE, sep = ";", dec = ",",
quote = "\"", fill = TRUE, comment.char = "",
skip = 37, stringsAsFactors = FALSE,
encoding = enc, ...)
tbl <- tbl[1:(nrow(tbl) - 2), c(2, 3, 4, 5, 7)]
colnames(tbl) <- c("Date", "Type", "Title", "Payee", "Amount")
cardTr <- grepl("DATA TRANSAKCJI: ", tbl$Title)
cardDateStart <- vapply(
gregexpr("DATA TRANSAKCJI: ", tbl$Title),
function(x) {attr(x, "match.length") + x[1]},
numeric(1L)
)
cardDate <- vapply(
seq_along(tbl$Title),
function(x) {
if (cardTr[x]) {
ret <- substr(tbl$Title[x], cardDateStart[x], 1000)
} else {
ret <- ""
}
ret
},
character(1L)
)
tbl$Date <- as.Date(ifelse(cardTr, cardDate, tbl$Date))
tbl$Amount <- as.numeric(gsub(",", ".", gsub(" ", "", tbl$Amount)))
tbl$Category <- rep("", nrow(tbl))
return(tbl)
}
#' @importFrom utils read.table
readIdea <- function(file, ...) {
tbl <- read.table(file, header = TRUE, sep = ";", dec = ",",
quote = "\"", fill = TRUE, comment.char = "",
skip = 1, stringsAsFactors = FALSE, ...)
if (Sys.info()['sysname'] == 'Windows') {
tbl <- tbl[, c(2, 16, 15, 10, 5)]
} else {
tbl <- tbl[, c(2, 24, 22, 17, 10)]
}
colnames(tbl) <- c("Date", "Type", "Title", "Payee", "Amount")
tbl$Date <- as.Date(as.character(tbl$Date), "%Y%m%d")
tbl$Amount <- ifelse(tbl$Type == 'uznanie', 1, -1) * tbl$Amount
tbl$Category <- rep("", nrow(tbl))
return(tbl)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.