0

Ruby で大きなファイルを操作します。

これから行うことは、改行のない一連の文字を含むギガバイト サイズのファイルにヘッダー行を追加し、結果を新しいファイルに出力することです。(以下に例を示します)。シーケンス内の各位置に 4 文字 (a、c、g、t) のいずれかを指定できます。

私の質問は

  1. ギガバイトサイズのファイルと出力ファイルをバイナリまたはテキストファイルとして開く必要がありますか?

  2. サンプルコードが知りたいです。(できれば、ギガバイト サイズのファイルのすべてのデータを一度にコンピューターのメモリにロードしたくありません。)

ありがとう。


例 プログラム名が add-header-giga の場合 (第 1 引数は header-line、第 2 引数は入力ファイル名を指定。出力ファイル名は output-file)

>cat ギガバイトサイズファイル.txt
cctgcaggagcagagcaaagaggtggccatccgcatctttcgggctgccagtttcgctcctggaggctgtgcag....


>add-header-giga DNA-sequence-from-Homo-Sapiens giga-byte-size-file.txt


>cat 出力ファイル
ホモサピエンスのDNA配列
cctgcaggagcagagcaaagaggtggccatccgcatctttcgggctgccagtttcgctcctggaggctgtgcag....
4

3 に答える 3

2

改行がなければ問題ありません。バイナリとテキストの違いは、改行の扱いだけです。

于 2012-11-05T12:22:45.640 に答える
1

このような何かが仕事をするかもしれません:

# Here you should check if you arguments are valid first

header = "#{ARGV[0]}\n"
file_to_read = ARGV[1]
file = IO.read(file_to_read)
open(file_to_read, 'w') { |f| f << header << file} 
于 2012-11-05T10:22:28.510 に答える
1
....

outf = File.open("tagged_file.out", "w")
outf.write(hdr)

CHUNK = 65536
File.open(file_to_read, "r") do |inf|
    while buf = inf.read(CHUNK)
      outf.write(buf)
    end
end
于 2012-11-05T15:36:03.503 に答える