【问题标题】:Deleting contents of file after a specific line in ruby在ruby中的特定行之后删除文件的内容
【发布时间】:2023-04-07 12:55:01
【问题描述】:

可能是一个简单的问题,但我需要删除特定行号之后的文件内容?所以我不想保留前 5 行并删除文件的其余内容。我一直在寻找一段时间,但找不到这样做的方法,我是一名 iOS 开发人员,所以 Ruby 不是我非常熟悉的语言。

【问题讨论】:

    标签: ruby file


    【解决方案1】:

    这就是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 的块形式保证了块结束时文件是关闭的。

    【讨论】:

      【解决方案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 来写你想要的行

      这对于大文件来说内存效率不是很高,所以如果你要这样做,你可能需要优化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-27
        • 2019-02-23
        • 1970-01-01
        • 2020-10-08
        相关资源
        最近更新 更多