#ruby
#ruby
Вопрос:
У меня есть некоторый код ruby, который должен выполняться и создавать некоторые файлы с выводами в нем.
Когда я запускаю код один раз, у меня вообще не возникает никаких проблем, но когда я пытаюсь запустить его в цикле, первый файл выходит с обычным выводом, но из второго файла все они следуют причудливому шаблону.
Если я запускаю его три раза, первый вывод приходит нормально, второй приходит с информацией о первом, за которой следует вывод, который он должен иметь, а третий сначала приходит с первым и вторым выводом, а затем это обычный вывод.
Это код, который я использую для чтения файла:
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 file один раз. Я действительно понятия не имею, в чем может быть причина, попытался создать новый экземпляр 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:
Это кажется банальным. Я предполагаю, что у вас есть постоянная ссылка на файл в каком-то коде, который опущен — это трудно увидеть с текущим объемом кода.
Когда я читаю, пишу, считываю в цикле, я получаю то, что вы ожидаете:
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 }
}
Если вы уверены, что хотите перезаписывать файл при каждом проходе, то вам, вероятно, следует удалять файл каждый раз.
Или дайте им разные имена…
Возможно, с дополнительной информацией я смогу быть более полезным.