【问题标题】:How do I save the text of puts in Ruby to a txt file?如何将 Ruby 中的 puts 文本保存到 txt 文件中?
【发布时间】:2014-11-07 03:32:24
【问题描述】:

我用 Ruby 编写了一个 madlib,并希望将生成的 madlib 保存到一个 txt 文件中。这是我写的,但是生成的txt文件是空的:

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

【问题讨论】:

  • 文件不能为空。其中应该有一个空行。否则,您的 Ruby 安装中的某些东西会严重损坏。
  • 你是对的。我说错了。在输出文件中确实有一个单一的但令人失望的空行。乐叹息。

标签: ruby file-io append puts


【解决方案1】:

有一些方法可以将脚本的输出保存到文件中,而无需修改脚本中的每个puts

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

如果您不介意稍微更改代码,可以通过将 STDOUT 重新分配给文件来临时改变解释器对 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,就像我们通常使用@ 987654327@.

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

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

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

这样做的好处是当块退出时文件将自动关闭。

【讨论】:

  • 我知道这是怎么回事。它将打印到屏幕上的问题的标准输出更改为打印到文件中。我在 ruby​​ 中编写 madlib 的方式是将问题打印到屏幕上,用户输入答案,这会发生 10 次左右,然后 get 用用户的答案填充 puts。看跌期权的标准是屏幕。我认为我在这方面太过 Ruby 新手,无法编写允许用户查看填充的 madlib 并将该 madlib 保存到文件的代码。
【解决方案2】:

这就是你要找的吗?您可以在附加模式下打开 madlib_output.txt 文件,您想要写入的任何内容都将在块内,例如:“hi”

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

【讨论】:

  • 在这种情况下......它会打开现有的 madlib_output 文件并将“HI”附加到它......这是您正在寻找的场景吗?
猜你喜欢
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
相关资源
最近更新 更多