0

ファイルから最初の 4 バイト、次の 4 バイト、次の 4 バイト、ファイルから最後の 8 バイトを除くファイル内の残りのバイトを読み取ると仮定して、次のようにコードに正規表現を記述した ruby​​ を使用して 1 つのファイルを読み取っています。現在、次のコードを使用して、これらの可変サイズ データ (.*) からバイトをさらに分割しようとしています。これは正しい方法ですか? 結果が得られていますが、正しいかどうかはまだわかりません。

これは、最初の正規表現の残りのアスタリスク部分の内容を最初にスキャンし、次に 2 番目の正規表現do..endで残りのバイトを再度スキャンする正しい方法ですか?do..end

File.open(filename,'rb') do |file|
file.read.scan(/(.{4})(.{4})(.{4})(.*)(.{8})/m).each do |a,b,c,d,e|
   puts "\Content 1:#{a}\n\n"
   b1 = b.unpack("N")
   puts "\n\nContent 2:\n#{b1}\n\n"
   puts "\n\nContent 3:\n#{c.unpack("N")}\n\n"
          d.scan(/(.{4})(.{4})(.{4})(.*)/).each do |p,q,r,s|
              puts "\n\nPContent 4:\n#{p.unpack("N")}\t"
              puts "Content 5\n:#{q.unpack("e")}\t"
              puts "Content 6:\n#{r.unpack("e")}\t"
              s.scan(/(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.*)/).each do |f,g,h,i,j,k,l,m,n,o,p|
                  puts "Content 7:#{f.unpack("e")}"
                  puts "Content 8:#{g.unpack("B")}"
                  puts "Content 9:#{h.unpack("B")}"
                  puts "Content 10:#{i.unpack("B")}"
                  puts "Content 11:#{j.unpack("e")}"
                  puts "Content 12:#{k.unpack("e")}"
                  puts "Content 13:#{l.unpack("e")}"
                  puts "Content 14:#{m.unpack("B")}"
                  puts "Content 15:#{n.unpack("B")}"
                  puts "Content 16:\t#{o}#{p}"
              end
          end
4

1 に答える 1

0

は、私にはよく見えますよ。

\A と \z を使用して、スキャンを文字列の最初と最後に固定することをお勧めします。

/\A...\z/

私の意見では、これにより、#scan を使用して一致を繰り返すよりも、文字列全体を一致させたいことがすぐにわかります。実行速度も速くなる可能性があります。

于 2012-04-06T06:37:04.510 に答える