Подтвердить что ты не робот

Разделение имени файла на имя, расширение

У меня есть имя файла, подобного этому: name1.csv, и я хотел бы извлечь две подстроки этой строки. Тот, который хранит name1 в одной переменной и другой, которая хранит расширение, csv, без точки в другой переменной.

Я искал, есть ли такая функция, как indexOf Java, которая позволяет делать такие манипуляции, но я ничего не нашел.

Любая помощь?

4b9b3361

Ответ 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"