#ruby #file #pdf
Вопрос:
Многие люди присылают мне свои счета, и они почти всегда представляют собой файлы .pdf. У меня ограниченный объем внимания, и поэтому я написал некоторый код ruby, чтобы мне не приходилось смотреть на них. Было бы полезно, если бы мой фрагмент кода Ruby заглянул в папку и, если там был счет, вернул имя файла и его путь. Дело в том, что люди, которые присылают мне свои счета, очень раздражают и называют свои файлы наихудшим образом. Например, один из них предоставил мне счет-фактуру под названием «Invoice_Cost_Centre_6454537.pdf». Нельзя ожидать, что я запомню такое имя. Однако они всегда (почти) .pdf-файлы. Я собирался поговорить об этом с Руби, и она сказала следующее,
File.exist?('testInvoice_Cost_Centre_61356.pdf')
#=> true
File.exists?('test*.pdf')
#=> false
Я просмотрел документы для File
класса и подумал, что File.fnmatch?(pattern, path)
это может быть решением, но я не смог заставить его работать.
Я был бы признателен за любую помощь. Я довольно новичок в Ruby, поэтому, пожалуйста, сокращайте свои предложения.
Комментарии:
1. «Я не смог заставить его работать» — недостаточно точное описание ошибки, чтобы мы могли вам помочь. Что не работает? Как это не работает? Какие проблемы у вас с вашим кодом? Вы получаете сообщение об ошибке? В чем заключается сообщение об ошибке? Является ли результат, который вы получаете, не тем результатом, которого вы ожидаете? Какого результата вы ожидаете и почему, какой результат вы получаете и чем они отличаются? Является ли поведение, которое вы наблюдаете, не желаемым поведением? Каково желаемое поведение и почему, каково наблюдаемое поведение и в чем они отличаются?
2. @desdinthewater : Я предлагаю использовать косые черты в качестве разделителя путей. Это избавляет вас от необходимости рассматривать случаи, когда обратная косая черта используется для экранирования последующего символа. Кроме того,
Dir.glob("directory/*.pdf")
это вернет вам массив всех имен, заканчивающихся на .pdf в этом каталоге.3. Это очень длинное объяснение такого маленького вопроса: -)
4. Что я могу сказать? Я болтун в изоляции
5. Спасибо всем, я нашел ответ Ндненкова наводящим на размышления. — И я потратил немного времени на чтение заметок по классу в Справочнике. В конце концов, ответ @user1934428 был самым простым, и получение массива обратно весьма полезно. Отвечая Йоргу Миттагу, я не был уверен, что нахожусь на правильном пути ( это подтвердили ндненков и пользователь1934428), и, как отметил Стефан, я могу быть немного запыхавшимся. Ответы на все ваши вопросы к вашему полному удовлетворению могли бы занять значительное время. Еще раз спасибо всем.
Ответ №1:
File.exists?
проверяет, существует ли файл с таким путем дословно.
File.fnmatch?
проверяет, соответствует ли путь заданному шаблону, но на самом деле не ищет этот путь.
Вместо этого вы могли бы Dir['test/*.pdf'].empty?
Комментарии:
1. Поскольку пользователь хочет проверить наличие, это, вероятно
Dir['test/*.pdf'].any?
(илиDir['*.pdf', base: 'test'].any?
для разделения каталога и шаблона файла)