Ruby - несколько проблем при отображении файлов - PullRequest
0 голосов
/ 05 ноября 2018

G'day,

Я пишу небольшой инструмент. Но обнаружил несколько проблем в одном фрагменте кода. Так что из-за незнания, что делать, я спрашиваю здесь сейчас.

Код:

def deleteExistingDatabase
  puts <<-DELETEDATABASE
    ####################################################
    #|                                                |#
    #|  Delete a existing Database                    |#
    #|  ------------------                            |#
    #|                                                |#
    #|  Which one do you want to delete?              |#
    #|  ------                                        |#
  DELETEDATABASE
  files = 0
  Dir.foreach("./database/") do |entry|
    files += 1
    puts  "    #|   #{files}. #{entry}                                     |#"
  end

end

и вот результат:

    ####################################################
    #|                                                |#
    #|  Delete a existing Database                    |#
    #|  ------------------                            |#
    #|                                                |#
    #|  Which one do you want to delete?              |#
    #|  ------                                        |#
    #|   1. aFileWithAVeryLongNameIsInHere.db                                     |#
    #|   2. middlelenghts.db                                     |#
    #|   3. ..                                     |#
    #|   4. short.db                                     |#
    #|   5. .                                     |#

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

следующий вопрос: в каталоге всего 3 файла. Но я получил 5 результатов .. почему? Что это за точки и как от них избавиться?

последний вопрос: если я спрашиваю пользователя, какой файл он хочет удалить. как я могу убедиться, что выбрал правильный, потому что 1-3 просто генерируется файлом + = 1, поэтому я не могу знать, что такое пользователи 1 или 2.

Надеюсь, вы, ребята, знаете, как мне помочь, потому что я полностью потерян. Заранее спасибо, VB

1 Ответ

0 голосов
/ 05 ноября 2018

Самый очевидный вопрос: возможно ли написать контент в макете, не разрушая его? Я имею в виду, если имя файла слишком длинное, это нормально, что дизайн ломается. Но даже если бы он идеально подходил, дизайн ломается.

Код делает именно то, что вы написали. Команда puts снова печатает пробелы, hashbang, вертикальную линию, затем пробелы, имя файла и заданное количество пробелов. Чтобы исправить его результат, вам нужно отрегулировать длину имени файла до некоторого предела, добавив пробелы в конец. Для этой цели вы можете использовать метод ljust :

puts  "    #|   #{files}. #{entry.to_s.ljust(35)} |#"

С этим кодом имя файла будет дополнено пробелами длиной до 35 символов.

следующий вопрос: в каталоге всего 3 файла. Но я получил 5 результатов .. почему? Что это за точки и как от них избавиться?

Это специальные скрытые файлы. . для самого каталога, .. для его родительского каталога. Смотрите здесь для более подробной информации. Вы можете пропустить их так, например:

Dir.entries("./database/").select { |entry| !%w[. ..].include?(entry) }.each do |entry|
  ...

Другой вариант - использовать children method:

Dir.children("./database/").each do |entry|
  ...

последний вопрос: если я спрашиваю пользователя, какой файл он хочет удалить. как я могу убедиться, что выбрал правильный, потому что 1-3 просто генерируется файлом + = 1, поэтому я не могу знать, что такое пользователи 1 или 2.

Hm. Я не думаю, что это хорошая идея на самом деле. В многопроцессорных системах другой процесс может удалить файл в каталоге после того, как вы напечатали его содержимое, но до того, как пользователь сделает выбор. В результате выбран неверный файл.

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