Ruby在循环中写入几个文件并没有给出预期的答案

时间:2016-10-19 00:12:20

标签: ruby

我有一些ruby代码应该执行并创建一些带有输出的文件。

当我一次运行代码时,我根本没有任何问题,但是当我尝试在循环中运行它时,第一个文件出现正常输出,但是从第二个文件foward,他们都遵循一种奇怪的模式。

如果我运行它三次,第一次输出正常,第二次输出第一个信息,然后输出它应该有的信息,第三个信息首先输入第一个和第二个输出,然后是第一个输出。正常输出。

这是我用来读取文件的代码:

File.open(path, 'rb') { |file| file.read }

这是我用来写文件的代码:

 File.open(path + '.txt', 'w') do |f|
  f.write text
 end

这是我多次运行代码的一部分:

while i < 4 do
    sample_path = "#{path}/samples/sample#{i}.html.erb"
    controller_grabber.grab_controllers(sample_path)
    answer_string = file_manager.read_file("#{path}/samples/sample#{i}_expected_answer.txt").gsub(/\s+/, "")
    tool_answer = file_manager.read_file("#{path}/outputs/#{file_manager.get_file_name(sample_path)}_output.txt").gsub(/\s+/, "")
    i += 1
end

在grab_controllers上我调用了一次write文件。我真的不知道原因是什么,试图创建一个新的controller_grabber和file_manager实例,但它没有工作

这是我得到的输出的一些例子

第一个预期结果:

[name: Show, type: @otml_file]
[name: Back, type: otml_files_path]

结果:

[name: Show, type: @otml_file]
[name: Back, type: otml_files_path]

第二个预期结果:

[name: Inicio, type: root_path]
[name: Producto, type: productos_index_path]
[name: Venta, type: venta_index_path]
[name: Proveedor, type: proveedor_index_path]
[name: Clientes, type: cliente_index_path]

第二个结果:

[name: Show, type: @otml_file]
[name: Back, type: otml_files_path]
[name: Inicio, type: root_path]
[name: Producto, type: productos_index_path]
[name: Venta, type: venta_index_path]
[name: Proveedor, type: proveedor_index_path]
[name: Clientes, type: cliente_index_path]

1 个答案:

答案 0 :(得分:0)

这似乎是香蕉。我猜你在一些省略的代码中对文件有一个挥之不去的引用 - 用当前的代码量很难看到。

当我阅读,写作,循环阅读时,我得到你期望的结果:

path = 'filename'
text = 'something'

10.times {
  p File.open(path, 'rb') { |file| file.read }

  result = File.open(path, 'w+') do |f|
    f.write text
  end

  p result

  p File.open(path, 'rb') { |file| file.read }
}

如果您确定要在每次传递时覆盖该文件,那么每次都应该delete该文件。

或者给他们不同的名字......

也许有更多信息我会更有帮助。