gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:48:15 27 4
gpt4 key购买 nike

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

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

示例如下:

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"

关于r - 使用 basename 捕获导致错误的文件名值的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34080155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com