将文件中的字符串转换为十六进制(Ruby)第二部分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将文件中的字符串转换为十六进制(Ruby)第二部分相关的知识,希望对你有一定的参考价值。

我是Ruby的新手,并尝试将包含DNA序列的文本文件转换为十六进制输出。我目前正在使用哈希来匹配具有十六进制值的字符串。

示例输入文件可能包含ctgcagccgc cgactgaaat。在这种情况下,输出应为79259 61E03。

如何正确散列文件以将哈希表键值从字符串输出到十六进制或其他字符串值?

以下是我到目前为止:

#dna_sequencing.rb

sequence_dna = {
  "aa" => 0, "ac" => 1, "ag" => 2, "at" => 3, "ca" => 4, "cc" => 5, 
  "cg" => 6, "ct" => 7, "ga" => 8, "gc" => 9, "gg" => 'A', 
  "gt" => 'B', "ta" => 'C', "tc" => 'D', "tg" => 'E', "tt" => 'F'
}
File.open("dna_sequences.txt") do |line|
    #puts line
    line.each do |fp|
        key, value = fp.chomp.split(" ")
        sequence_dna[key] = value
        #puts sequence_dna[key]
        puts sequence_dna
    end
end
答案
'ctgcagccgc cgactgaaat'.gsub(/w./, sequence_dna)
=> "79259 61E03"
另一答案
input = 'ctgcagccgc cgactgaaat'
output =
  input.split.map do |s|
    s.chars.each_slice(2).map { |g| sequence_dna[g.join] }
  end.map(&:join).join(' ')
#⇒ "79259 61E03"
另一答案

因为在任何现实世界的DNA分析中你都会遇到大文件,我会建议一个程序从一个文件中读取并写回另一个文件。这样就可以避免内存不足的问题。

下面的sequence方法处理文件读写。 dna_to_hex方法在逐行的基础上进行比较和替换。

SEQUENCE_DNA = {
    'aa' => '0', 'ac' => '1', 'ag' => '2', 'at' => '3', 'ca' => '4', 'cc' => '5',
    'cg' => '6', 'ct' => '7', 'ga' => '8', 'gc' => '9', 'gg' => 'A',
    'gt' => 'B', 'ta' => 'C', 'tc' => 'D', 'tg' => 'E', 'tt' => 'F'
}

def sequence(input_file_name, output_file_name)
  File.open(output_file_name, 'w') do |output_file|
    File.open(input_file_name).each_line { |line| output_file.write(dna_to_hex(line)) }
  end
end

def dna_to_hex(line)
  line.gsub(/S./, SEQUENCE_DNA)
end

您将通过传递输入文件的名称和输出文件的名称来使用它:

>> sequence('dna_sequences.txt', 'dna_output.txt')

编辑:我从@StefanPochmann借用了字符串替换方法,因为它似乎是解决这个问题的最佳选择。

以上是关于将文件中的字符串转换为十六进制(Ruby)第二部分的主要内容,如果未能解决你的问题,请参考以下文章

如何将 64 位二进制字符串转换为 ruby​​ 中的双浮点数?

java基础知识第二部分

在 Ruby 中将整数转换为十六进制字符串

Python学习手册(第二部分)

司徒正美文章列表

More Effective C++ 第二部分 操作符