회사에서 오래 전부터 사용하던 장난감 중 C로 만든 바이너리 파일을 나누는 간단한 프로그램이 있어요. 제가 만든 건 아니고 있던거라 유용하게 사용하던 건데, 오랫만에 다시 사용할 일이 생겼습니다.
그런데 입력파일의 크기가 전에 쓰던 것과 달라져서 그대로는 동작을 안 하고 어짜피 코드를 좀 고쳐야 해서 오랫만에 소스를 열어봤어요. 그냥 파일 열고 옵션값에 따라 미리 정의된 크기만큼 쪼개면 되는건데, 간단하다고 해도 C로는 코드가 100줄이 넘어갑니다.
급한데로 필요한 부분만 고쳐서 일단 사용하고, 이걸 Ruby로 다시 만들어보기로 했어요. Ruby에서 파일 처리하는 부분은 해본 적이 없어서 조금 헤매기는 했는데, 생각보다 어렵지는 않았습니다.
20줄 좀 넘는 코드가 만들어졌는데, 사실 다른 분들에게는 전혀 불필요한 장난감이고 회사에서 사용하는거라 코드를 올릴까 말까 조금 고민했습니다. 일단 Ruby에서 바이너리 파일을 가지고 노는 예제삼아, 나중에 저도 다시 써먹을 일이 있을까 싶어서 올려봅니다. :)
if ARGV.size > 0
base = File.new(ARGV[0], "rb")
else
base = File.new("bank.rom", "rb")
end
fe = File.new("fe.bin", "wb")
be = File.new("be.bin", "wb")
fe_size = 0x10000
be_size = 0x100000
ARGV.each do | option |
fe_size = 0x20000 if option.to_s == "-f2"
be_size = 0x200000 if option.to_s == "-b2"
end
fe.write(base.read(fe_size))
be.write(base.read(be_size))
base.close
fe.close
be.close
그런데 입력파일의 크기가 전에 쓰던 것과 달라져서 그대로는 동작을 안 하고 어짜피 코드를 좀 고쳐야 해서 오랫만에 소스를 열어봤어요. 그냥 파일 열고 옵션값에 따라 미리 정의된 크기만큼 쪼개면 되는건데, 간단하다고 해도 C로는 코드가 100줄이 넘어갑니다.
급한데로 필요한 부분만 고쳐서 일단 사용하고, 이걸 Ruby로 다시 만들어보기로 했어요. Ruby에서 파일 처리하는 부분은 해본 적이 없어서 조금 헤매기는 했는데, 생각보다 어렵지는 않았습니다.
20줄 좀 넘는 코드가 만들어졌는데, 사실 다른 분들에게는 전혀 불필요한 장난감이고 회사에서 사용하는거라 코드를 올릴까 말까 조금 고민했습니다. 일단 Ruby에서 바이너리 파일을 가지고 노는 예제삼아, 나중에 저도 다시 써먹을 일이 있을까 싶어서 올려봅니다. :)
if ARGV.size > 0
base = File.new(ARGV[0], "rb")
else
base = File.new("bank.rom", "rb")
end
fe = File.new("fe.bin", "wb")
be = File.new("be.bin", "wb")
fe_size = 0x10000
be_size = 0x100000
ARGV.each do | option |
fe_size = 0x20000 if option.to_s == "-f2"
be_size = 0x200000 if option.to_s == "-b2"
end
fe.write(base.read(fe_size))
be.write(base.read(be_size))
base.close
fe.close
be.close


덧글
지아 2008/10/14 16:36 # 답글
fe.write(base.read(fe_size))코딩하면서 제일 마음에 들었던 부분...
C로 저거 코딩하려면 완전 안습일텐데.. ㅋㅋ
dgoon 2008/10/14 17:59 # 삭제 답글
리눅스 쉘 스크립트로는 한줄이라능! >_<///
지아 2008/10/14 18:00 #
작업환경이 윈도우라...cygwin에서도 가능한거면 저도 좀 알려주시라능 >_<