Skip to content

Instantly share code, notes, and snippets.

@gustavorps
Last active August 27, 2019 17:52
Show Gist options
  • Save gustavorps/453dfb6af422e0ea5a32f26107d8c1c8 to your computer and use it in GitHub Desktop.
Save gustavorps/453dfb6af422e0ea5a32f26107d8c1c8 to your computer and use it in GitHub Desktop.
library(read.dbc)
library(R.utils)
library(stringr)
library(base)
library(tools)
file_format_choices = c('csv', 'tsv')
file_format = file_format_choices[menu(file_format_choices, 'Formato de conversão')]
arq_local = choose.dir(caption = "Diretório com arquivos DBC")
arq_destino = choose.dir(caption = "Diretório de destino")
arq_pattern = "(ABO|ACF|AD|AM|AN|AQ|AR|ATD|BI|PA|PS|DO|DN)(ES).*\\.(dbc|DBC)$"
setwd(arq_local)
files = list.files(path='.', pattern=arq_pattern)
lista = NULL
for (i in 1:length(files)) {
print(paste(i, " = ", files[i]))
lista = read.dbc(files[i])
gz = gzfile(gettextf("%s\\%s.%s.gz",
arq_destino,
file_path_sans_ext(files[i]),
file_format))
# TODO: refactor
if (file_format == 'csv') {
write.csv(x = lista,
file = gz,
quote=FALSE,
sep=',',
row.names=FALSE)
} else if (file_format == 'tsv') {
write.table(x = lista,
file = gz,
quote=FALSE,
sep='\t',
row.names=FALSE)
} else {
stop('Formato não suportado ')
}
}
@gustavorps
Copy link
Author

Outra alternativa para conversão de arquivos .dbc por pastas

if (!require("read.dbc")) install.packages("danicat/read.dbc")
if (!require("optparse")) install.packages("optparse")

library("read.dbc")
library("optparse")

option_list = list(
  make_option(c("-di", "--dir_input"), type="character", default="./data/",
              help="Diretório contendo os arquivo *.dbc", metavar="character"),
  make_option(c("-do", "--dir_output"), type="character", default="./data/",
              help="Diretório de destino [default= %default]", metavar="character"),
  make_option(c("-fo", "--format_output"), type="character", default="csv",
              help="Formato de conversão [default= %default]", metavar="character"),
  make_option(c("-ca", "--cols_anon"), type="character", default=c(),
              help="Formato de conversão [default= %default]", metavar="character")
);

opt_parser = OptionParser(option_list=option_list);
opt = parse_args(opt_parser);


dbc_files_path <- list.files(opt$dir_input, pattern = "*.(?i)dbc", 
                             full.names = TRUE)
dir.create(opt$dir_output, showWarnings=FALSE)

# Convert files to 
for (dbc_file_path in dbc_files_path) {
  file_mame <- sub('\\..*$', '', basename(dbc_file_path))
  df <- read.dbc(dbc_file_path)
  
  file_dest <- paste(opt$dir_output, '/', file_mame, ".", 
                     opt$format_output, sep="")
  
  if (opt$format_output == 'tsv') {
    write.table(df, file_dest, quote=FALSE, 
                sep="\t", row.names = FALSE)
  } else if (opt$format_output == 'csv') {
    write.csv(df, file_dest, row.names = FALSE)
  } else {
    stop("Formato não suportato")
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment