Отрезать имя файла и расширение данной строки - PullRequest
0 голосов
/ 28 марта 2009

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

def getFiles(directory)
  arr = Dir[directory + '/**/*.plt']
  arr.each do |k|
    puts "#{k}"
  end
end

Выходные данные - это путь и файлы. Но я хочу только путь.

Вместо /foo/bar.txt я хочу только / foo /

Моей первой мыслью было регулярное выражение, но я не уверен, как это сделать.

Ответы [ 6 ]

7 голосов
/ 28 марта 2009

Может ли File.dirname быть полезным?

File.dirname (имя_файла) → dir_name

Возвращает все компоненты имени файла указано в file_name кроме последнего один. Имя файла должно быть сформировано с использованием косая черта (`` / ’’) независимо от разделитель, используемый в локальном файле система.

File.dirname("/home/gumby/work/ruby.rb") #=> "/home/gumby/work"
4 голосов
/ 28 марта 2009

Вам не нужно регулярное выражение или разделение.

File.dirname("/foo/bar/baz.txt")
# => "/foo/bar"
1 голос
/ 28 марта 2009

Должен работать следующий код (проверено в консоли ruby):

>> path = "/foo/bar/file.txt"
=> "/foo/bar/file.txt"
>> path[0..path.rindex('/')]
=> "/foo/bar/"

rindex находит индекс последнего появления подстроки. Вот документация http://docs.huihoo.com/api/ruby/core/1.8.4/classes/String.html#M001461

Удачи!

0 голосов
/ 28 марта 2009

Для регулярного выражения это должно работать, так как * жадный:

.*/
0 голосов
/ 28 марта 2009

не знаю, на каком языке вы говорите, но вот регулярное выражение для последнего / до конца строки.

/[^\/]*+$/

Транслитерирует на все символы, которые не являются '/' до конца строки

0 голосов
/ 28 марта 2009

Я бы разбил его на массив по слешам, затем удалил последний элемент (имя файла), затем снова соединил его в строку.

path = '/foo/bar.txt'

path = path.split '/'
path.pop
path = path.join '/'

# path is now '/foo'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...