Ruby-显示文件时的几个问题

时间:2018-11-05 18:37:07

标签: ruby file io menu

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 :(得分:0)

  

最明显的问题是:是否可以在不破坏布局的情况下将内容写入布局?我的意思是,如果文件名太长,则设计中断是正常的。但是,即使它非常合适,设计也将失败。

代码完全符合您的编写。 puts命令再次打印空格,哈希,垂直线,然后打印空格,文件名和给定数量的空格。要修复其结果,您需要通过在文件名末尾添加空格来将文件名的长度调整为某个限制。为此,您可以使用ljust方法:

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

使用此代码,文件名将用空格填充,长度为35个字符。

  

下一个问题:目录中只有3个文件。但是我有5个结果..为什么?这些点是什么,我如何摆脱它们?

这些是特殊的隐藏文件。 .用于目录本身,..用于其父目录。有关更多详细信息,请参见here。您可以这样跳过它们,例如:

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

另一种选择是使用children方法:

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

最后一个问题:如果我问用户他要删除哪个文件。我该如何确定选择正确的一个,因为1-3只是由文件+ = 1生成的,所以我不知道用户1或2是什么。

嗯。我认为这实际上不是一个好主意。在多进程系统中,在您打印目录内容之后但在用户进行选择之前,另一个进程可能会删除目录中的文件。结果,选择了错误的文件。