Проверка ввода каталога

#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? функция была бы лучше; извините — не подумал.