我在一个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"