R/read_zipdata.R

Defines functions find_dhsvar read_zipdta read_zipdata

# '@...  additional arguments to readfn()
read_zipdata <- function(zfile, pattern=".dta$", readfn=foreign::read.dta, ignore.case=TRUE, ...){
  tmp <- tempfile()
  on.exit(unlink(tmp))
  file <- grep(pattern, utils::unzip(zfile, list=TRUE)$Name, ignore.case, value=TRUE)
  if(!length(file)){
    warning(paste0("File name matching pattern '", pattern, "' not found in zip file '", basename(zfile), "'."))
    return(invisible(NULL))
  }
  if(length(file) > 1)
    warning(paste0("Multiple file names match pattern '", pattern, "' in zip file '", basename(zfile), "'. Returning file '", file[1], "'."))
  return(readfn(utils::unzip(zfile, file[1], exdir=tmp), ...))
}

read_zipdta <- function(zfile, ...){
  read_zipdata(zfile, ".dta$", foreign::read.dta, TRUE, ...)
}

find_dhsvar <- function(zfile, str="hdpidx", pattern=".MAP$", ignore.case=TRUE){
  map <- read_zipdata(zfile, pattern, readLines, TRUE)
  as.logical(length(grep(str, map, ignore.case)))
}
mrc-ide/hhsurveydata documentation built on March 31, 2022, 1:05 p.m.