我在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"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句