删除ruby中特定行之后的文件内容

时间:2015-07-19 15:19:47

标签: ruby file

可能是一个简单的问题,但我需要在特定的行号后删除文件的内容?因此,我不想保留第一行,例如5行,并删除文件的其余内容。我一直在寻找并找不到办法,我是iOS开发人员,因此Ruby不是我非常熟悉的语言。

2 个答案:

答案 0 :(得分:5)

这称为truncate。 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的块形式确保在块结束时关闭文件。

答案 1 :(得分: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用于所需的行

对于大型文件来说,这不会对内存有效,所以如果你正在做的话,你可能想要进行优化。