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



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

最明显的问题是:是否可以在布局中写入内容而不破坏它?我的意思是,如果文件名太长,设计中断是正常的。但是,即使它能完美地配合,设计也很糟糕。

代码完全按照您编写的操作。puts命令再次打印空格、hashbang、竖线、空格、文件名和给定的空格数。要修复其结果,您需要通过在末尾添加空格来将文件名的长度调整到一定的限制。你可以使用ljust方法:

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

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

下一个问题:目录中只有3个文件。但我得到了5个结果。。为什么?这些点是什么?我该如何去掉它们?

这些是特殊的隐藏文件。.表示目录本身,..表示其父目录。请参阅此处了解更多详细信息。你可以这样跳过它们,例如:

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

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

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

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

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

最新更新