В R можно ли получить полный путь и имя файла (в Windows) файла, скопированного в буфер обмена?
Предыстория такова: у меня есть несколько больших файлов Excel, содержащих данные, которые я хотел бы обработать R.
Файловая система относительно неструктурирована, поэтому программное получение путей/имен этих файлов на самом деле не является вариантом. Я также не хочу открывать файлы Excel для копирования данных в R, потому что открытие больших файлов Excel занимает много времени. Поэтому я ищу вариант, в котором я могу перейти к файлу с помощью проводника, скопировать файл в буфер обмена, а затем прочитать содержимое файла в R, который я мог бы настроить, если смогу извлечь имя файла и путь. .
Оба utils::readClipboard() и clipr::read_clip() возвращают NULL, если файл скопирован в буфер обмена.
В настоящее время у меня нет доступа к Windows, но взгляните на значение getClipboardFormats(), оно может дать вам представление о том, как Windows хранит пути к файлам в буфере обмена, и посмотрите документацию .
Попробуйте format = 15L. См. stackoverflow.com/a/52156638/1968. Вам также может потребоваться указать raw = TRUE и проанализировать необработанные данные в строку.
Помимо изящного решения Конрада Рудольфа: многие редакторы предлагают последовательное автозаполнение пути к файлу (обычно посредством нажатия TAB) и файловый проводник. Таким образом, вам не придется переключаться между редактором и другими приложениями.





Пакет utils охватывает это
file_path <- utils::readClipboard()
print(file_path)
здесь много интересных вариантов для игр, получайте удовольствие :) https://rdrr.io/r/utils/clipboard.html
ОП уже пробовал это, но безуспешно.
Развивая комментарии Конрада, вы можете получить путь к файлу из файла, скопированного в буфер обмена, используя readClipboard() с форматами 49158 (короткое имя файла) и 49159 (длинное имя файла). Например, после копирования исполняемого файла R в буфер обмена:
# Short filename
readClipboard(format = "49158", raw = TRUE) |>
rawToChar()
[1] "C:\\PROGRA~1\\R\\R-44~1.1\\bin\\x64\\R.exe"
# Long filename
readClipboard(format = "49159", raw = TRUE) |>
rawToChar(multiple = TRUE) |>
paste0(collapse = "")
[1] "C:\\Program Files\\R\\R-4.4.1\\bin\\x64\\R.exe"
Большое спасибо! Для меня format = 15L не сработало, вместо него нужно было поставить format = 49158, о чем тоже упоминалось в этом посте. Причина, предположительно, заключалась в том, что файлы находятся не на моем компьютере, а на сетевых дисках моей компании. Следуя первому комментарию Конрада, вы можете использовать getClipboardFormats(), чтобы определить возможные значения для format.
@chm - Спасибо! Я обновил ответ.
Вы можете использовать
file.choose()для выбора файла в системных диалогах.