R: Построить путь к файлу из пользовательского ввода - PullRequest
4 голосов
/ 24 февраля 2012

У меня есть две переменные, work.dir и my.file.Это означает, что пользователь хотел бы сохранить my.file в work.dir.Пользователя просят ввести work.dir путь, и это - то, где это становится хитрым.Если пользователь вводит work.dir путь

c:/temp/

, и я пытаюсь paste это с my.name, я получу

c:/temp/my.file.

Но если пользователь введет

c:/temp

, я получу

c:/tempmy.file.

Пока я былборясь с этим с извлечением различных частей work.dir и склеиванием его вместе для достижения согласованности, но мне было интересно, есть ли другой способ (который был бы, возможно, более устойчивым)?

Пока это мое решениеполучить согласованный каталог, который можно использовать для вставки вместе с именем файла.

work.dir <- "c:/temp"
work.dir <- paste(dirname(work.dir), basename(work.dir), sep = "")

1 Ответ

2 голосов
/ 24 февраля 2012

Джеймс справедливо указывает, что в большинстве случаев каталог будет интерпретирован правильно.Если это вас не устраивает и предполагается, что ваш пользователь знает, что он или она не должны использовать обратную косую черту в своем каталоге, вы можете использовать file.path() для решения вашей проблемы, например, так:

makepath <- function(path,file){
  path <- as.list(strsplit(path,'/')[[1]])
  do.call(file.path,c(path,file))
}

Есливаш пользователь может использовать обратную косую черту в Windows (и забыть, что он должен избегать их с другой обратной косой чертой), вы можете добавить следующие элементы управления:

makepath <- function(path,file){
  if(grepl('[^[:graph:]]',path)) 
    stop("Invalid characters. Check you didn't use a single \\")
  win <- grepl('\\\\',path)
  sep <- if(win) '\\\\' else '/'
  path <- as.list(strsplit(path,sep)[[1]])
  do.call(file.path,c(path,file))
}

Это дает:

> makepath('c:\\temp','myfile')
[1] "c:/temp/myfile"
> makepath('c:\\temp\\','myfile')
[1] "c:/temp/myfile"
> makepath('c:/temp','myfile')
[1] "c:/temp/myfile"
> makepath('c:/temp/','myfile')
[1] "c:/temp/myfile"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...