잊지 않겠습니다.

Ruby에서의 standard io method
  1. standard IO method : gets, open, print, printf, putc, puts, readline, readlines, test
  2. IO class 이용 : ruby class 이용

   

IO class
  • Child Class : File, BasicSocket etc...
  • 기본적인 사용방법은 거의 동일하다.
  • 잘짜여진 객체에 대한 논의를 해볼 만 하다.

File IO Class

File Open/Close

file = File.new("testfile", "r")
 # File Process...
file.close

File의 auto close and exception handling

File.Open("testfile", "r") do |file|
 #File Process...
end

File Read/Write

기본적으로 C에서의 기본 IO와 비슷하다. - 이래서 C가 중요한가 보다. -_-

  • file.gets : file에서 one lline을 읽는다.
  • file.get : file에서 one character를 읽는다.

   

읽기를 위한 반복자

IO Stream에서 데이터를 읽기 위해서 사용

  • each_byte : byte 단위로의 return
  • each_line : line 단위로 이용
File.open("testfile") do |file|
 file.each_byte { |ch| putc ch; print "." }
end
File.open("testfile") do |file_data|
 file_data.each_line { |line| print line }
end
C++ iosteam을 이용한 file write
  • <<을 이용한 file write 가능
  • 이는 array, string 등에도 같이 이용 가능하다. [너무나 신기하다. -.-]
write_file = File.open("test_write_file", "w")
write_file << "ykyoon OK"
write_file.close

  

문자열을 이용한 IO
  • 문자열이 파일에 있지 않고, 명령어 인수나 SOAP 서비스를 통한 데이터인 경우에는 문자열 자체를 IO로 사용가능하다.
  • StringIO객체를 이용해서 해결 가능하다.

require 'stringio'

file_data = File.new("vs2005_development.ini")
str_io = StringIO.new("string_io")

file_data.each_line do |line|
    str_io << line
end

print str_io.string

  

Communicate with Network
  • network와의 대화 역시 모두 IO에서 기본적으로 파생되어서 해결 가능하다.
  • Socket Class 들을 이용한 IO를 사용 가능하다.

require 'socket'

client = TCPSocket.open('127.0.0.1', 'finger')
client.send("mysql", 0)

puts client.readlines
client.close

require 'open-uri'

open('http://www.pragmaticprogrammer.com') do |f|
    puts f.read.scan(/<img src="(.*?)"/m).uniq
end

Posted by Y2K
,