Ruby文件存储无法正确写入

时间:2017-07-23 23:34:08

标签: ruby-on-rails ruby

我正在编写一个假设的程序,用于在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

1 个答案:

答案 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)