2015-07-19 68 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的块形式确保块在文件结束时关闭。