#' Importar arquivo de contratos de cartões Visa
#'
#' Importa o arquivo T4 para o R ou para o MySQL.
#'
#' @export
#'
#' @param caminho String. O caminho do arquivo a ser importado, incluindo a
#' extensão (.txt).
#' @param MySQL Logical. Se TRUE, entao o arquivo será importado para o MySQL.
#' @param schema String. Se MySQL = TRUE, o nome do schema que conterá a tabela
#' T4 no MySQL. O schema deve existir no MySQL antes de executar a função.
#' @param tabela String. Se MySQL = TRUE, o nome da tabela a ser criada no
#' servidor que conterá os dados importados.
#'
#' @details Se for importar apenas para o R, lembre-se de nomear um objeto para
#' o resultado da função. Caso for importar para o MySQL, não é necessário
#' criar um objeto. Note que a tabela será sobrescrita se já existir.
#'
#' @examples
#' \dontrun{
#' # para importar para o R:
#' data = import_gco("C:\\Arquivos\\GCO\\202009.txt")
#'
#' # para importar para o MySQL:
#' import_gco(
#' "C:\\Arquivos\\GCO\\202009.txt",
#' mysql = TRUE,
#' tabela = "t202009",
#' user = "alberson"
#' )
#' }
#'
import_t4 = function(caminho,
mysql = FALSE,
schema = "t4",
tabela,
drop = FALSE,
metodo = c("vroom", "readr"),
host,
port,
user,
password = NULL) {
# evaluate arg tabela
if (mysql == TRUE && is.null(tabela)) {
stop("tabela deve ser informada")
}
# evaluate arg host
if (mysql == TRUE && is.null(user)) {
stop("host deve ser informado")
}
# evaluate arg user
if (mysql == TRUE && is.null(user)) {
stop("user deve ser informado")
}
# evaluate arg metodo
match.arg(metodo)
# conexao com MySQL
if (mysql == TRUE) {
tryCatch(
{
con = DBI::dbConnect(
RMySQL::MySQL(),
host = host,
port = port,
db = schema,
user = user,
password = ifelse(
is.null(password),
rstudioapi::askForPassword("Database password"),
password
)
)
},
error = function(cond) {
message(cond)
stop(
paste(
"Talvez você não tenha criado o schema",
schema,
"no MySQL?"
)
)
}
)
}
# leitura arquivo
colunas = c(
"cid", "conta_corrente", "status_conta", "tit", "cpfcnpj", "nome",
"nome_embosso", "limite", "nr_plastico", "saldo_devedor",
"dias_atraso", "vencimento", "tel_fixo", "ddd_fixo",
"tel_recado", "ddd_recado", "tel_celular", "ddd_celular",
"bloq_visa", "bloq_mon", "bloq_plastico", "status_contrato",
"spfc", "tp_cc", "cod_ar", "fatura_digital", "dt_modificacao",
"ult_canal_alt", "status_sms", "dt_modificacao_2", "dt_solic_cc",
"nr_pedido_via_atual", "motivo_solic", "status_aut", "status_plastico",
"nr_via", "pct", "dia_fatura", "debito_automatico", "dt_venc_cnt",
"status_conta_visa", "verified_by_visa", "qnt_pts_fideli",
"debito_forcado", "dt_venda", "origem_contrato", "localizacao_cnt",
"env_esteira", "dt_ult_trans_visa_elec", "dt_ult_debito_forcado",
"nr_id_cli", "id_plastico", "nr_contrato_credito", "nr_conta_visa"
)
col_types = readr::cols(
cpfcnpj = readr::col_character(),
nr_conta_visa = readr::col_character(),
vencimento = readr::col_date("%Y%m%d"),
dt_modificacao = readr::col_date("%Y%m%d"),
dt_modificacao_2 = readr::col_date("%Y%m%d"),
dt_solic_cc = readr::col_date("%Y%m%d"),
dt_venc_cnt = readr::col_date("%Y%m%d"),
dt_venda = readr::col_date("%Y%m%d"),
dt_ult_debito_forcado = readr::col_date("%Y%m%d"),
dt_ult_trans_visa_elec = readr::col_date("%Y%m%d"),
limite = readr::col_double(),
saldo_devedor = readr::col_double(),
dias_atraso = readr::col_double(),
qnt_pts_fideli = readr::col_double()
)
# importar arquivo para o R via {readr}
if (metodo == "readr") {
data = readr::read_csv(
caminho,
col_names = colunas,
col_types = col_types
)
}
# importar arquivo para o R via {vroom}
if (metodo == "vroom") {
data = vroom::vroom(
caminho,
delim = ";",
col_types = col_types,
col_names = colunas
)
}
# criar tabela no MySQL
if (mysql == TRUE) {
# sobrescrever tabela
if (drop == TRUE) {
# dropar tabela
DBI::dbSendQuery(con, paste("DROP TABLE IF EXISTS", tabela))
# gravar tabela
DBI::dbWriteTable(con, DBI::SQL(tabela), data)
# gravar índices
DBI::dbSendQuery(con, paste0("
ALTER TABLE ", schema, ".", tabela, "
ADD INDEX idx_nr_conta_visa (nr_conta_visa(16)),
ADD INDEX idx_cpfcnpj (cpfcnpj(14));
"))
} else {
# append da tabela
DBI::dbWriteTable(con, DBI::SQL(tabela), data, append = TRUE)
}
# desconectando
DBI::dbDisconnect(con)
} else {
data
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.