2015-07-19 62 views
3

可能是一個簡單的問題,但我需要刪除特定行號後的文件內容?所以我不想保留第一行例如5行並刪除文件的其餘內容。我一直在尋找一段時間,找不到一種方法來做到這一點,我是一名iOS開發人員,所以Ruby不是我非常熟悉的語言。在ruby中刪除特定行後的文件內容

回答

2

我不知道從文件中刪除任何方法,所以我第一個想法是讀取文件,然後回寫。是這樣的:

path = '/path/to/thefile' 
start_line = 0 
end_line = 4 
File.write(path, File.readlines(path)[start_line..end_line].join) 

File#readlines讀取文件,並返回字符串,其中每個元素是文件中的一個線的陣列。然後你可以使用subscript operator with a range作爲你想要的行

這對於大文件來說不會很高效,所以你可能想要優化,如果這是你將要做的事情。

5

這就是所謂的truncate。該截斷方法需要之後,一切都被切斷字節位置 - 與File.pos方法提供了這一點:

File.open("test.csv", "r+") do |f| 
    f.each_line.take(5) 
    f.truncate(f.pos) 
end 

從File.open的「R +」模式下讀寫,而無需現有文件截斷至零大小,就像「w +」一樣。

File.open的塊形式確保塊在文件結束時關閉。