我正在编写一个假设的程序,用于在Ruby中存储理论上无限数量的数字,每次运行程序时都会添加一个新的数字。它应该输出这些数字,比如说你跑了三次,进入1,2和3:
输出行1:#1:1
输出第2行:#2:2
输出第3行:#3:3
问题是,它没有那样做。它只是替换文件中已存在的内容。
以下是代码:
def getNum
print "Enter a number: "
return gets.to_i
end
def writeFile
if not File.file?("data.txt")
data = File.new("data.txt", "w+")
puts "[ File created? ]"
else
data = File.open("data.txt", "w+")
puts "[ File opened. ]"
end
x = getNum
File.write("data.txt", x, File.size?("data.txt"))
data.close
readFile
end
def readFile
y = 0
File.readlines("data.txt").each do |line|
y += 1
print y
print ": " + line
puts
end
end
writeFile
答案 0 :(得分:1)
File.open(path, 'a')
将创建该文件(如果该文件不存在并附加到该文件中)。
所以这是一个简化的脚本:
puts "enter num"
num = gets.chomp.to_i
File.open("data.txt", "a") { |f| f.write("#{num}\n") }
File.readlines("data.txt").each_with_index do |line, index|
puts "output #{index + 1}: #{line}"
end
运行此示例:
max@max ~/Desktop> ruby script.rb
enter num
1
output 1: 1
max@max ~/Desktop> ruby script.rb
enter num
2
output 1: 1
output 2: 2
注意我在\n
添加了f.write
- 因此附加的文字并非全部在同一行。
或者,使用自动包含尾随换行符的f.puts
(感谢Amadan)