#### Code for parsing log files grabTimeAndBadge <- function(con) { startTime <- NA stopTime <- level <- NA badge <- NA open(con) tryCatch({ line <- readLines(con,1) while (length(line)>0) { if (grepl("Level Start",line)) { ## Process Start while (length(line>0)) { line <- readLines(con,1) if (grepl("\\},?$",line)) break; keyval <- strsplit(line,":")[[1]] if (grepl("\"time\"",keyval[1],fixed=TRUE)){ startTime <- as.integer(gsub(",","",keyval[2],fixed=TRUE)) } if (grepl("\"level_path\"",keyval[1],fixed=TRUE)){ level <- keyval[2] } } if(length(line)==0) break; } if (grepl("Level End",line)){ ## Process End while (length(line>0)) { line <- readLines(con,1) if (grepl("\\},?$",line)) break; keyval <- strsplit(line,":")[[1]] if (grepl("\"time\"",keyval[1],fixed=TRUE)){ stopTime <- as.integer(gsub(",","",keyval[2],fixed=TRUE)) } if (grepl("\"badge\"",keyval[1],fixed=TRUE)){ badge <- keyval[2] } } break } line <- readLines(con,1) }}, error=function(e) {warning("Error",e)}, finally= close(con)) list(time=stopTime-startTime,level=level,badge=badge) } grabFromZip <- function (id,zipfile=paste(id,"zip",sep="."), grabber=grabTimeAndBadge) { filelist <- unzip(zipfile,list=TRUE)[,1] n <- length(filelist) rec1 <- do.call(grabber,list(unz(zipfile,filelist[1]))) res1 <- c(id=id,rec1) result <- lapply(res1,function(x) rep(x,n)) result <- as.data.frame(result,stringsAsFactors=FALSE) if (n>1) { for (i in 2:n) { reci <- do.call(grabber,list(unz(zipfile,filelist[i]))) for (j in 1:length(reci)) { result[i,j+1] <- reci[[j]] } } } result } setwd("~/ownCloud/Shared/PhysicsPlayground/2014FSUSdata/NP-FSUS-ID-REPLACED") grabFromDir <- function (dir,grabber=grabTimeAndBadge) { zips <- list.files(dir,"*.zip") results <- NULL for (zf in zips) { cat("Processing file",zf,"\n") ID <- as.integer(gsub("\\(.\\)","",strsplit(zf,".",fixed=TRUE)[[1]][1])) res <- grabFromZip(ID,paste(dir,zf,sep=.Platform$file.sep),grabber) if (is.null(results)) { results <- res } else { results <- rbind(results,res) } } results }