[Ruby] 바이너리 파일 나누기 공부이야기

회사에서 오래 전부터 사용하던 장난감 중 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



트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://grow.egloos.com/tb/4670118 [도움말]
  • 지아의 생각 2008/10/14 16:25 #

    C로 100줄이 넘어가던 걸 Ruby로 만드니 20줄 좀 넘어간다. 바이너리 파일 나누기 장난감.... more

덧글

  • 지아 2008/10/14 16:36 # 답글

    fe.write(base.read(fe_size))

    코딩하면서 제일 마음에 들었던 부분...
    C로 저거 코딩하려면 완전 안습일텐데.. ㅋㅋ
  • dgoon 2008/10/14 17:59 # 삭제 답글

    리눅스 쉘 스크립트로는 한줄이라능! >_<///
  • 지아 2008/10/14 18:00 #

    작업환경이 윈도우라...
    cygwin에서도 가능한거면 저도 좀 알려주시라능 >_<
덧글 입력 영역