2014-11-03 113 views
1

我想在下面添加換行符。 但結果是錯誤的。 教我什麼是錯的。如何在文件中添加新行

的test.txt(前)

------------------ 
2014-09 
2014-10 
2014-11 
------------------ 

的test.txt(後)

------------------ 
2014-09 
2014-10 

2014-11 
------------------ 

我做下面的Ruby腳本,但結果是錯誤的。

f = File.open("test.txt","r+") 
f.each{|line| 
    if line.include?("2014-10") 
    f.puts nil 
    end 
} 
f.close 

結果

------------------ 
2014-09 
2014-10 

014-11 
------------------ 
+0

檢查此http:/ /learnrubythehardway.org/book/ex16.html – 2014-11-03 07:13:09

+0

而不是'f.puts'嘗試'f.write'\ n「' – nishanthan 2014-11-03 07:14:22

+0

@takuma - 你可以在這裏放置預期的o/p嗎? – 2014-11-03 07:14:53

回答

1

讀取和寫入,同時文件會導致混亂,同樣的事情如數組等數據結構。你應該建立一個新的文件。

一些注意事項:

  • 你應該使用的File.open塊形式,因爲它會阻止你忘記打電話給f.close
  • puts nil相同puts不帶參數
  • 單引號優於雙引號時不需要字符串插值
  • 您應該使用do ... end而不是{ ... } for multi-li NE塊
  • File.open(...).each可以與File.foreach
  • 中間結果可被存儲在一個StringIO對象替換這將到puts響應等

實施例:

require 'stringio' 

file = 'test.txt' 
output = StringIO.new 

File.foreach(file) do |line| 
    if line.include? '2014-10' 
    output.puts 
    else 
    output << line 
    end 
end 

output.rewind 

File.open(file, 'w') do |f| 
    f.write output.read 
end 
2

解決您的問題,最簡單的方法是創建一個新的文件,以輸出新的文本。你需要打開輸入文件和輸出文件,並迭代文件的每一行檢查條件並將所需的行放入輸出文件。

require 'fileutils' 

File.open("text-output.txt", "w") do |output| 
    File.foreach("text.txt") do |line| 
    if line.include?("2014-10") 
     output.puts line + "\n" 
    else 
     output.puts line 
    end 
    end 
end 

FileUtils.mv("text-output.txt", "text.txt") 

簡單的方法

File.write(f = "text.txt", File.read(f).gsub(/2014-10/,"2014-10\n")) 
+0

謝謝Benji.My問題解決了。 – takuma 2014-11-15 02:27:18

相關問題