r-捕获使用basename导致错误的文件名的部分值



我在一个windows盒子上,使用basename从一些目录中提取文件名。显然,文件名的大小是有限制的,否则basename会抛出一个错误(之前我在linux上,我不记得有什么问题,从源代码来看,basename对不同的系统来说是不同的,所以这很可能不是linux或osx上的可复制示例)

无论如何,我将basename封装在tryCatch中,并且希望在出现错误时只捕获文件名的最后一块。我该怎么做?

以下示例:

filename <- paste0("c:/some directory/", paste(rep("abc ", 100), collapse=""), ".txt")
basename(filename)
# Error in basename(filename) : path too long

所以,我做了一个tryCatch,

value <- tryCatch(basename(filename), error=function(e) e)
str(value)
# $ message: chr "path too long"
# $ call   : language basename(filename)
# - attr(*, "class")= chr [1:3] "simpleError" "error" "condition"

但是,我怎么能得到文件名的最后30个字符,而不是一条错误消息呢?

这里的数学比注释中的要好。我不会像你说的那样出错,所以我会做一个

filename <- paste0("c:/some directory/", paste(rep("abc ", 100), collapse=""), ".txt")
basename(filename)

value <- tryCatch(simpleError(), error=function(e)
  substring(filename, nchar(filename) - 29, nchar(filename)))
str(value)
# chr "c abc abc abc abc abc abc .txt"

value <- tryCatch(simpleError(), error=function(e)
  gsub('(.{30}$)|.', '\1', filename))
str(value)
# chr "c abc abc abc abc abc abc .txt"

最新更新