몇 가지 루비 예제 코드

루비를 제대로 공부하진 않았지만, 언어가 간결한 덕분에 여러가지 상황에서 유용하게 사용하고 있습니다. 그 동안 만들어서 사용했던 몇 가지 루비 예제 코드를 소개합니다. 여기에 소개하는 코드를 조금만 수정하면 다양한 경우에 활용할 수 있을 것 같네요.

1. 소스코드에서 32자 이상의 심볼을 사용한 라인을 찾아 출력하기

HITACHI 메인프레임 C 컴파일러가 32자 이상의 심볼을 지원하지 않더군요. 일일이 찾기 힘들어서 이를 찾기 위해 작성한 프로램입니다. 현재 디렉토리에 존재하는 소스코드를 읽어 32자 이상의 심볼을 찾은 경우 해당 라인을 라인번호와 함께 출력합니다.

file_array = Array.new

Dir.foreach(“.”) { |x|
  if x.include?(“.c”) or x.include?(“.h”) or x.include?(“.y”) or x.include?(“.l”)
    file_array.push(x)
  end
}

file_array.each { |fname|
  File.open(fname) { |fp|
    lineno = 1
    while line = fp.gets
        line.scan(/[1-9a-zA-Z_]+/) { |x|
          if x.length > 32
            puts “#{fname}:#{lineno}:+#{x.length – 32}:#{x}”
          end           
        }
        lineno = lineno + 1
    end
  }
}

2. 파일의 라인 뒤집기

매년 말 블로그에 독서 리스트를 정리할 때 사용하기 위해 작성한 프로그램입니다. 티스토리에서 목록을 뽑아 파일에 저장한 후 이를 뒤집어 독서 리스트를 읽은 순서대로 뽑아냅니다.

line_array = Array.new
File.open(“ReadingList.txt”) do |file|
    while line = file.gets
        line_array.push(line)
    end
end
ofile = File.new(“ReadingList.rev.txt”, “w”)
line_array.reverse!
cnt = 1
line_array.each do |reversed_line|
    ofile.puts(“#{cnt}. #{reversed_line}”)
    cnt = cnt + 1
end
ofile.close

3. 프로그램 수행 및 stderr, stdout 얻기

루비에서 다른 프로그램을 실행하고 stderr, stdout을 추출하는 예제 코드입니다. 루비를 사용하여 배치 스크립트를 작성 할 때 유용할 것 같네요.

require ‘session’

t=Thread.new do
  sh = Session.new
  sh.execute( ‘ruby /home/stefano/documenti/scripts/prova.rb’ ) do |out, err|
    puts “Msg: #{out}” if out
    puts “Err: #{err}” if err
  end
end
t.join