Разделение имени файла на имя, расширение
У меня есть имя файла, подобного этому: name1.csv
, и я хотел бы извлечь две подстроки этой строки. Тот, который хранит name1
в одной переменной и другой, которая хранит расширение, csv
, без точки в другой переменной.
Я искал, есть ли такая функция, как indexOf
Java, которая позволяет делать такие манипуляции, но я ничего не нашел.
Любая помощь?
Ответы
Ответ 1
Используйте strsplit
:
R> strsplit("name1.csv", "\\.")[[1]]
[1] "name1" "csv"
R>
Обратите внимание, что вам нужно избегать точки (так как это метасимвол для регулярных выражений) и b) иметь дело с тем, что strsplit()
возвращает список, из которого обычно интересует только первый элемент.
Более общее решение включает регулярные выражения, в которых вы можете извлечь совпадения.
Для специального случая имен файлов у вас также есть:
R> library(tools) # unless already loaded, comes with base R
R> file_ext("name1.csv")
[1] "csv"
R>
и
R> file_path_sans_ext("name1.csv")
[1] "name1"
R>
поскольку это такие общие задачи (cf basename
в оболочке и т.д.).
Ответ 2
Используйте strsplit()
:
http://stat.ethz.ch/R-manual/R-devel/library/base/html/strsplit.html
Пример:
> strsplit('name1.csv', '[.]')[[1]]
[1] "name1" "csv"
Обратите внимание, что второй аргумент является регулярным выражением, поэтому вы не можете просто передать одну точку (она будет интерпретирована как "любой символ" ).
Ответ 3
Используя регулярное выражение, вы можете сделать это, например
regmatches(x='name1.csv',gregexpr('[.]','name1.csv'),invert=TRUE)
[[1]]
[1] "name1" "csv"