Ruby에서의 standard io method
- standard IO method : gets, open, print, printf, putc, puts, readline, readlines, test
- 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
endprint 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