我有一个初学者编码任务,第一步是我的程序"应该提示用户输入一个包含以下信息的文件的文件名:"已经有预先制作的代码可以运行了,一个"music_player。rb"(我必须在这里写代码)和"albums.text"(这是我要读取的文件)
我知道a_file = File.new("mydata.txt", "r")
是从文件中读取。我想做:
file_name = gets()
a_file = File.new("#{file_name}" , "r") # (line 13)
总是出错
music_player_with_menu.rb:13:in `initialize': No such file or directory @ rb_sysopen - albums.txt (Errno::ENOENT)
,当我输入albums.txt
。如果我只是去除gets
和File.new("albums.txt" , "r")
它工作。我不知道我做错了什么。
尝试从mydata.txtn
读取将引发异常,除非文件名实际上以n
结束,这是很少发生的情况。这是因为您使用了#gets,它包含了用户按RETURN或ENTER时的换行符。
当你从STDIN读取时,你会得到一个行结束符(例如,在*nix上n
,在Windows上rn
)。因此,当调用#gets时,几乎总是需要对结果调用String#chomp。
file_name = gets
#=> "foon"
file_name = gets.chomp
#=> "foo"