我有以下代码段:
File.open(input, "w+").each do |line|
puts "Enter line content, or \"-EOF-\" to stop inputting."
input = gets.chomp
if input == "-EOF-"
break
else
line.puts input
end
end
它创建文件,但是不执行其他指定的操作。为什么会这样?
答案 0 :(得分:2)
它创建文件,但是不执行其他指定的操作。为什么会这样?
因为调用File.open(...).each
而不是File.open(...)
–您想打开文件而不是遍历文件的内容。
此外,您不必发明自己的EOF处理方式。按下 Ctrl - D 将生成EOF指示符,该指示符进而导致gets
返回nil
。
这使您可以进行一个简单的循环:
File.open(input, 'w+') do |file|
puts 'Enter lines, or hit "Ctrl-D" to stop inputting.'
while line = gets
file.puts line
end
end
答案 1 :(得分:0)
因为您正在创建一个新文件,并且该文件为空,所以没有行,也没有执行块。如果要进入循环,该文件应包含一些行,并且需要以附加模式打开它
Container
答案 2 :(得分:0)
这里有两个问题。
一个,您还使用文件名变量File.open(input...
作为用户输入的变量(input = gets.chomp
)。不要那样做。
第二,当您打开现有文件以使用w+
进行写入时,会将其截断为零长度。在这一点上,您的循环实际上是一个障碍。如果您正在阅读,那将是另一回事。
尝试打开文件并将其分配给变量:
f = File.new(input, "w+")
然后运行一个循环(begin...end while
),该循环获取输入并将其写入f
,如下所示:
userstuff = gets.chomp
f.write(userstuff)
完成写入后,请不要忘记关闭文件:
f.close
答案 3 :(得分:0)
在我看来,您想要完成的工作是写入文件。这是一个经过修改的版本,它回显了您所编写的内容,并将其作为新行添加到文件中:
input = 'test.txt'
File.open(input, "w+") do |file| # File open returns the file, not it's lines
loop do
puts "Enter line content, or \"-EOF-\" to stop inputting."
input = gets # no chomp here, because we probably want that in the file
if input.chomp == "-EOF-" # chomp here to compare with `"-EOF-"` instead of "-EOF-\n"
break
else
file << input # this writes your input line to the file
puts input
end
end
end