Несколько базовых имен файлов в грабли - PullRequest
0 голосов
/ 15 мая 2019

У меня есть папка с несколькими файлами PDF, и имя файла выглядит следующим образом:

1_abc.pdf
2_xyz.pdf
3_qwe.pdf

Что нужно сделать, это просто получить первую часть имени файла,

1
2
3

Итак, я пытаюсь сгенерировать задачу rake, чтобы она заработала, но я не собираюсь выяснять, как реализовать ее для нескольких файлов.

namespace :request_document do
  desc "Expects to get a file or folder ..."
  task(:import_attachment, [:filename]) do |t, args|
    files = Dir.foreach("/Users/admin/Documents/Data/Attachments")
     puts files
      *This gives the list of all the files under the attachment folder*
  end
end

Поэтому я подумал оиспользуя что-то вроде

File.basename"1_abc.pdf".sub(/\_..*/, '')
=>  1

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

1 Ответ

1 голос
/ 15 мая 2019

Вы можете просто перебрать имена файлов, например:

Dir["/Users/admin/Documents/Data/Attachments/*"].each do |filename|
  puts File.basename(filename).sub(/\_.*/, '')
end

Так что с этим грабли задача будет выглядеть примерно так:

namespace :request_document do
  desc "Expects to get a file or folder ..."
  task(:import_attachment, [:path]) do |t, args|
    if File.directory?(args[:path])
      Dir["#{path}/*"].each do |file_path|
        puts File.basename(file_path).sub(/\_.*/, '')
      end
    else
      puts File.basename(args[:path]).sub(/\_.*/, '')
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...