如何使用Ruby从大文本中删除几个重复的三元组?

时间:2017-12-13 10:12:11

标签: ruby

class RNAtoAA
  def self.rna_convert(rna)
    rna.slice!"AUG"
  end
end

我试过删除“AUG”(我还需要删除2个以上的重复模式)但是它没有产生所需的结果。我也试过.gsub("AUG", "UAA")

2 个答案:

答案 0 :(得分:0)

string = 'AAAAUG'
RNAtoAA.rna_convert(string)
puts string
# AAA

似乎按预期工作了 如果要返回更新的字符串,请使用:

class RNAtoAA
  def self.rna_convert(rna)
    rna.slice!"AUG"
    return rna
  end
end

答案 1 :(得分:0)

您需要以块的形式读取文件,以免内存被淹没。 此示例创建一个测试文件,并将其用作过滤版本的源。 如果你要创建一个千兆字节的大型测试文件,你需要为创建测试文件做同样的事情。 如果您的文件包含换行符,则可以通过延迟加载行来更简单,但我会假设它没有。

# create a testfile
patterns = ["AUG", "UAA", "UAG", "UGA","AAA", "BBB", "CCC"]
large_string = ""
1_000_000.times{large_string << patterns.sample}
File.write("rna.dat", large_string)

#read the file, remove some patterns and write in a new file
filtered = ["AUG", "UAA", "UAG", "UGA"]
File.open("filtered.dat", "w") do |out_file|
  File.open("rna.dat", "r") do |in_file|
    while chunk = in_file.read(3)
      # Read small chunks of 3 bytes to limit memory usage
      out_file.write chunk unless filtered.include? chunk
    end
  end
end