#ruby #validation
#ruby #проверка
Вопрос:
Их ввод должен быть каталогом в c:foldersubfolder формат. Кроме того, я не хочу, чтобы он пытался запускаться, если каталог не содержит файлов .flv. Поэтому он должен существовать и содержать.flv-файлы. В противном случае он должен попросить пользователя ввести другой каталог.
Код также очищает косые черты и добавляет завершающую косую черту, которая мне нужна для других частей программы. То, что у меня работает, когда задан каталог, который существует и содержит файлы .flv, но если он не содержит .flv-файлы он просто завершает программу вместо запроса дополнительных входных данных; это означает, что он работает до тех пор, пока существует каталог, даже если в нем нет файлов .flv.
def is_valid_dir()
input = "nil"
until File.directory?(input) amp;amp; Dir.glob("#{input}*.flv")
puts "Enter the full directory path of the flv files."
input = gets.chomp
if input[-1..-1] == '/'
# Do nothing if it already
# ends with a forward slash.
else
input = '/'
end
end
input.gsub!('\', '/')
return input
end
Комментарии:
1. ruby-forum.com/topic/135748 — Похоже, там много полезных предложений.
Ответ №1:
Dir.glob
возвращает пустой массив, если совпадений нет; проверьте его длину.
Кроме того, вы говорите, что ввод должен быть обратной косой чертой, но проверяете прямую косую черту. Кроме того, идиоматически вы, вероятно, пишете это как:
input = '/' unless input[-1..1] == '/'
Комментарии:
1. Я думаю, что пустой массив указывает мне правильный путь. И совет по поводу более чистого кода, безусловно, полезен. Так гораздо удобнее читать!
2. @thekungfuman Надеюсь, что больше, чем «на правильном пути», поскольку с этим изменением код работает как есть.
3. Удалось заставить его работать, сравнив его с пустым массивом, как вы предложили. Большое спасибо.
4. @thekungfuman Не сравнивайте его с пустым массивом, проверьте его длину.
5. @thekungfuman На самом деле,
any?
функция была бы лучше; извините — не подумал.