R - 如何根据用户输入从目录中提取文件

时间:2016-06-11 18:07:49

标签: regex r pattern-matching

我对R来说相对较新,并且在文件提取方面苦苦挣扎。 我在我的目录001.csv中有一个CSV文件列表(即002.csvxyz,....),需要根据用户提供的输入提取特定文件。 用户输入的格式为12 ...(存储在y),我尝试通过引导0来转换。

当我运行代码时

filename = as.character(formatC(y, width=3, flag=0))

list.files(directory,pattern = "^",filename,"\\.csv$")

我得到了结果

character[0]

这意味着我的模式代码不正确,我想要提取例如:001.csv的文件

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

您似乎错过了匹配任何以filename开头的文件的模式,然后可以匹配任何0+个字符,并以.csv结尾。

要构建它,请使用paste0

files <- list.files(directory, pattern = paste0("^", filename, ".*\\.csv$"))

其中:

  • "^" - 文件名字符串的开头
  • filename - 您传递的文件名
  • ".*\\.csv$" - 任意0个字符(.*),后跟.csv\\.csv)字符串末尾($)。

答案 1 :(得分:0)

  

formatC

0标志y似乎只适用于数字对象;如果您使用e读取用户输入y = readline()。 G。 yfilename = formatC(as.integer(y), width=3, flag=0) 的类型为&#34;字符&#34;。您可以使用

获得所需的格式
as.character()

formatC()不是必需的,因为list.files(directory,pattern = "^",filename,"\\.csv$")值已经具有该类型。)

  

list.files(path = ".", pattern = NULL, all.files = FALSE, full.names = FALSE, recursive = FALSE, ignore.case = FALSE)

这不是

的正确用法
"^"

- 当然你打算连接filename"\\.csv$"sprintf()

总而言之,我建议用filename = sprintf("%03d\\.csv", as.integer(y)) list.files(directory, filename) 构建整个文件名模式,i。 E:

<activity
    android:name="SplashActivity"
    android:screenOrientation="portrait"
    android:configChanges="keyboardHidden|orientation|screenSize">