2014-09-12 143 views
0

我在Ruby中写了一个madlib,并且想要将生成的madlib保存为一个txt文件。这是我写的,但由此产生的txt文件是空的:如何将Ruby中的put文本保存到txt文件中?

file=File.open("madlib_output.txt","a") 
file.puts 
file.close 
+0

该文件不应该为空。应该有一个单一的空行。否则,Ruby安装中的某些内容会严重损坏。 – 2014-09-12 22:15:02

+0

你说得对。我错过了。在文件中确实存在一个单一但令人失望的空行。勒叹。 – 2014-09-13 15:36:22

回答

0

有办法救一个脚本文件的输出,而不必修改脚本中的每个puts

最简单的方法是使用重定向在命令行路由输出。在该命令处运行带有> some_file的脚本将将所有STDOUT路由到该文件。同样,使用> some_file 2>&1会将STDOUT和STDERR路由到同一个文件。当代码等待输入时,这将不会捕获在gets中输入的任何内容,因为这不会被视为程序输出。

如果你不介意改变你的代码一点,你可以暂时重新分配给一个文件改变stdout是什么解释的想法:

old_stdout = $stdout 
File.open('output.txt', 'w') do |fo| 
    $stdout = fo 

    # ---- 
    # your code goes here 
    puts "hello world" 
    # ---- 

end 
$stdout = old_stdout 

运行的是,再看看文件“ output.txt“,你会看到”hello world“,即使我们没有直接打印到文件fo,就像我们通常使用fo.puts那样。

做同样的事情有很多种方式,但它们相当于将STDOUT或STDERR指向其他地方,写入它们,然后重置它们。

通常情况下,如果我们从一开始就输出到文件打算,那么我们应该使用一个File.open块:

File.open('output.txt', 'w') do |fo| 
    fo.puts "hello world" 
end 

的是,好处是该文件将被关闭块退出时自动。

+0

我明白了这一点。它将打印到屏幕上的问题的标准输出更改为打印到文件。我在ruby中编写madlib的方式是将问题打印到屏幕上,用户输入答案,发生10次或更多次,然后获取用户的答案。投标的标准是屏幕。我认为我只是一个Ruby新手,在这个工艺代码中允许用户看到填充的madlib,并将该madlib保存到文件中。 – 2014-09-13 15:34:49

1

这是你在找什么?您可以追加模式打开madlib_output.txt文件,不管你想写将是块如内:“喜”

File.open("madlib_output.txt","a") do |f| 
f.puts "hi" 
end 
+1

没有。这是行不通的。 – 2014-09-13 15:44:29

+0

在这种情况下......它打开现有的madlib_output文件,并附加“HI”它..这是你正在寻找的场景? – 2014-09-13 18:16:42

相关问题