В качестве примера - конвертор из таблички ST в ASM и обратно, для текстовых файлов Vortex II (на руби).
Код:ff = File.new("filename.txt","r") lines = ff.readlines("\n") freqtable =nil lines.each { |z| if z =~ /NoteTable=(\d+)/ then freqtable = $1.to_i abort "Incorrect FreqTable" if freqtable != 1 and freqtable != 2 end } lines.each { |z| if z =~ /(NoteTable=)(\d+)/ then ft = $2.to_i z = $1 + (ft == "1"? "2": "1") end if z[0,5] =~ /^\.*([A-G|0-9]+)\|/ then originalEnvelope = $1.to_i(16) case freqtable when 1 #st to asm resultedEnvelope = (originalEnvelope.to_f * 0.879143316085256).to_i.to_s(16).upcase when 2 #asm to st resultedEnvelope = (originalEnvelope.to_f * 1.13747096941248).to_i.to_s(16).upcase end # print "#{$1} hex = #{$1.to_i(16)} = #{resultedEnvelope} \n" prefix = "" (4-resultedEnvelope.length).times {prefix = prefix + "."} resultedEnvelope = prefix + resultedEnvelope #puts resultedEnvelope z[0,4] = resultedEnvelope puts z else puts z end } # end ff.close




Ответить с цитированием