Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > stringioライブラリ > StringIOクラス
クラスの継承リスト: StringIO < Data < Object < Kernel < BasicObject
文字列に IO と同じインタフェースを持たせるためのクラスです。
例:
require "stringio"
sio = StringIO.new("hoge", 'r+')
p sio.read #=> "hoge"
sio.rewind
p sio.read(1) #=> "h"
sio.write("OGE")
sio.rewind
p sio.read #=> "hOGE"
StringIO オブジェクトは大抵の場合 IO オブジェクトと同じ例外を発生させます。 例えば次の例では write は IOError を発生させます。
require "stringio"
sio = StringIO.new("hoge")
sio.close
sio.write("a")
# => in `write': not opened for writing (IOError)
new(string = '', mode = 'r+') -> StringIO[permalink][rdoc]open(string = '', mode = 'r+') -> StringIOopen(string = '', mode = 'r+') {|io| ... } -> objectStringIO オブジェクトを生成して返します。
与えられた string がフリーズされている場合には、mode はデフォルトでは読み取りのみに設定されます。 ブロックを与えた場合は生成した StringIO オブジェクトを引数としてブロックを評価してその結果を返します。
require 'stringio'
s = "foo"
io = StringIO.new(s)
p io.getc # => 102
p io.pos # => 1
p io.size # => 3
io << "bar"
p io.size # => 4
p s # => "fbar"
io.rewind
p io.gets # => "fbar"
StringIO.open("hoge"){|io|
p io.string # => "hoge"
}
self << obj -> self[permalink][rdoc]obj を pos の位置に書き込みます。 必要なら obj.to_s を呼んで 文字列に変換します。 self を返します。
binmode -> self[permalink][rdoc]何もせずに self を返します。
each_byte {|ch| ... } -> self[permalink][rdoc]bytes {|ch| ... } -> selfeach_byte -> Enumeratorbytes -> Enumerator自身から 1 バイトずつ読み込み、整数 ch に変換し、それを引数として与えられたブロックを実行します。
a = StringIO.new("hoge")
a.each_byte{|ch| p ch }
#=>
104
111
103
101
each_char {|c| ... } -> self[permalink][rdoc]chars {|c| ... } -> selfeach_char -> Enumeratorchars -> Enumerator自身に含まれる文字を一文字ずつブロックに渡して評価します。
自身は読み込み用にオープンされていなければなりません。
[SEE_ALSO] IO#each_char
close -> nil[permalink][rdoc]自身を close します。以後、自身に対する読み書きが禁止されます。 close された StringIO に読み書き等が行われると IOError が発生します。
close_read -> nil[permalink][rdoc]自身に対する読み取りを禁止します。
close_write -> nil[permalink][rdoc]自身に対する書き込みを禁止します。
closed? -> bool[permalink][rdoc]自身が既に close されていた場合に true を返します。そうでない場合は、false を返します。
sio = StringIO.open("hoge")
p sio.closed? # => false
sio.close_read
p sio.closed? # => false
sio.close_write
sio.closed? # => true
closed_read? -> bool[permalink][rdoc]自身に対する読み取りが禁止されているなら true を返します。そうでない場合は、false を返します。
closed_write? -> bool[permalink][rdoc]自身に対する書き込みが禁止されているなら true を返します。そうでない場合は、false を返します。
codepoints {|codepoint| ... } -> self[permalink][rdoc]codepoints -> Enumeratoreach_codepoint {|codepoint| ... } -> selfeach_codepoint -> Enumerator自身の各コードポイントに対して繰り返します。
[SEE_ALSO] IO#each_codepoint
each(rs = $/) {|line| ... } -> self[permalink][rdoc]each_line(rs = $/) {|line| ... } -> selflines(rs = $/) {|line| ... } -> selfeach(rs = $/) -> Enumeratoreach_line(rs = $/) -> Enumeratorlines(rs = $/) -> Enumerator自身から 1 行ずつ読み込み、それを引数として与えられたブロックを実行します。
a = StringIO.new("hoge\nfoo\n")
a.each{|l| p l }
#=>
"hoge\n"
"foo\n"
[SEE_ALSO] $/
eof -> bool[permalink][rdoc]eof? -> bool自身の pos が文字列の終端にあれば true を返します。そうでないなら false を返します。
external_encoding -> Encoding[permalink][rdoc]現在の外部エンコーディングを返します。
fcntl -> ()[permalink][rdoc]例外 NotImplementedError が常に発生します。
fileno -> nil[permalink][rdoc]何もせず nil を返します。
flush -> self[permalink][rdoc]何もせずに self を返します。
fsync -> 0[permalink][rdoc]何もせずに 0 を返します。
getbyte -> Integer | nil[permalink][rdoc]自身から 1 文字読み込んで、その文字に対応する Fixnum を返します。 文字列の終端に到達した時には nil を返します。
a = StringIO.new("ho")
a.getc #=> 104
a.getc #=> 111
a.getc #=> nil
getc -> String | nil[permalink][rdoc]自身から 1 文字読み込んで、その文字を返します。 文字列の終端に到達した時には nil を返します。
a = StringIO.new("ho")
a.getc # => "h"
a.getc # => "o"
a.getc # => nil
gets(rs = $/) -> String | nil[permalink][rdoc]自身から 1 行読み込んで、その文字列を返します。文字列の終端に到達した時には nil を返します。 $_ に読み込んだ行がセットされます。
a = StringIO.new("hoge")
a.gets #=> "hoge"
$_ #=> "hoge"
a.gets #=> nil
$_ #=> nil
[SEE_ALSO] $/
internal_encoding -> Encoding[permalink][rdoc]現在の内部エンコーディングを返します。
isatty -> false[permalink][rdoc]何もせず false を返します。
size -> Integer[permalink][rdoc]length -> Integer文字列の長さを返します。
lineno -> Integer[permalink][rdoc]現在の行番号を返します。これは StringIO#gets が呼ばれた回数です。
lineno=(n)[permalink][rdoc]現在の行番号を n にセットします。
pid -> nil[permalink][rdoc]何もせず nil を返します。
pos -> Integer[permalink][rdoc]tell -> Integer自身の現在の位置を返します。
pos=(n)[permalink][rdoc]自身の位置を n に移動します。自身が表す文字列のサイズより大きくても構いません。
a = StringIO.new("hoge", 'r+')
a.pos = 10
a << 'Z'
a.string #=> "hoge\000\000\000\000\000\000Z"
print() -> nil[permalink][rdoc]print(*obj) -> nil自身に引数を順に出力します。引数を省略した場合は、$_ を出力します。 引数の扱いは Kernel.#print を参照して下さい。
a = StringIO.new("", 'r+')
a.print("hoge", "bar", "foo")
a.string #=> "hogebarfoo"
printf(format, *obj) -> nil[permalink][rdoc]指定されたフォーマットに従い各引数 obj を文字列に変換して、自身に出力します。
a = StringIO.new("", 'r+')
a.printf("%c%c%c", 97, 98, 99)
a.string #=> "abc"
putc(ch) -> object[permalink][rdoc]文字 ch を自身に書き込みます。 ch が数字なら 0 〜 255 の範囲の対応する文字書き込みます。 ch が文字列なら、その先頭の文字を書き込みます。ch を返します。
puts(*obj) -> nil[permalink][rdoc]obj と改行を順番に自身に出力します。引数がなければ改行のみを出力します。 詳しい仕様は Kernel.#puts を参照して下さい。
a = StringIO.new("", 'r+')
a.puts("hoge", "bar", "foo")
a.string #=> "hoge\nbar\nfoo\n"
read -> String[permalink][rdoc]read(len) -> String | nilread(len, outbuf) -> String自身から len バイト読み込んで返します。len が省略された場合は、最後まで読み込んで返します。 詳しい仕様は IO#read を参照して下さい。
sysread -> String[permalink][rdoc]sysread(len) -> Stringsysread(len, outbuf) -> Stringreadpartial -> Stringreadpartial(len) -> Stringreadpartial(len, outbuf) -> Stringread_nonblock(maxlen, outbuf = "") -> String自身から len バイト読み込んで返します。 StringIO#read と同じです。ただし、文字列の終端に達した場合、EOFError を投げます。
readchar -> Integer[permalink][rdoc]readbyte -> Integer自身から 1 文字読み込んで、その文字に対応する整数を返します。
文字列の終端に到達した時には例外 EOFError を発生させます。
a = StringIO.new("hoge")
a.readchar #=> 104
readline(rs = $/) -> String[permalink][rdoc]自身から 1 行読み込んで、その文字列を返します。
文字列の終端に到達した時には、例外 EOFError を発生させます。 IO#readline と違い読み込んだ文字列を変数 $_ にセットしません。
a = StringIO.new("hoge\nfoo\nbar\n")
a.readline #=> "hoge\n"
a.readline(nil) #=> "foo\nbar\n"
a.readline #=> EOFError が発生する
[SEE_ALSO] $/
readlines(rs = $/) -> [String][permalink][rdoc]自身からデータを全て読み込んで、その各行を要素としてもつ配列を返します。 既に文字列の終端に達していれば空配列 [] を返します。
a = StringIO.new("hoge\nfoo\nbar\n")
a.readlines #=> ["hoge\n", "foo\n", "bar\n"]
a.readlines #=> []
[SEE_ALSO] $/
reopen(sio) -> StringIO[permalink][rdoc]自身が表す文字列が指定された StringIO と同じものになります。
例:
require 'stringio'
sio = StringIO.new("hoge", 'r+')
sio2 = StringIO.new("foo", 'r+')
sio.reopen(sio2)
p sio.read #=> "foo"
reopen(str, mode = 'r+') -> StringIO[permalink][rdoc]自身が表す文字列が指定された文字列 str になります。
与えられた str がフリーズされている場合には、mode はデフォルトでは読み取りのみに設定されます。 ブロックを与えた場合は生成した StringIO オブジェクトを引数としてブロックを評価します。
例:
require 'stringio'
sio = StringIO.new("hoge", 'r+')
sio.reopen('foo')
p sio.read #=> "foo"
rewind -> 0[permalink][rdoc]自身の pos と lineno をそれぞれ 0 にします。
seek(offset, whence = IO::SEEK_SET) -> 0[permalink][rdoc]自身の pos を whence の位置から offset バイトだけ移動させます。
set_encoding(ext_enc) -> self[permalink][rdoc]set_encoding(ext_enc, int_enc) -> selfset_encoding(ext_enc, int_enc, opt) -> self自身のエンコーディングを指定されたエンコーディングに設定します。
string -> String[permalink][rdoc]自身が表す文字列を返します。
返されるのは生成時に与えられたバッファとして使われている文字列です。 文字列は複製されないことに注意して下さい。
例:
sio = StringIO.new sio << "abc" s = sio.string p s #=> "abc" sio << "xyz" p s #=> "abcxyz"
string=(buf)[permalink][rdoc]自身が表す文字列を指定された buf に変更します。
buf はバッファとして使われ、書き込みメソッドによって書き換えられます。 自身は読み書き両用になりますが、 buf がフリーズされている場合には読み取り専用になります。 pos と lineno は 0 にセットされます。
sync -> true[permalink][rdoc]何もせずに true を返します。
sync=(bool)[permalink][rdoc]何もせずに bool を返します。
syswrite(obj) -> Integer[permalink][rdoc]write_nonblock(obj) -> Integer自身に obj を書き込みます。StringIO#write と同じです。
truncate(len) -> Integer[permalink][rdoc]自身のサイズが len になるように、自身を切り詰め、もしくは拡大します。 拡大した場合は、その部分を 0 で埋めます。 len を返します。
a = StringIO.new("hoge", 'r+')
a.truncate(2)
a.string #=> "ho"
a.truncate(5)
a.string #=> "ho\000\000\000"
tty? -> false[permalink][rdoc]何もせず false を返します。
ungetbyte(char) -> nil[permalink][rdoc]指定された char を読み戻します。
2バイト以上の読み戻しは保証されません。
[SEE_ALSO] IO#ungetbyte
ungetc(str_or_int) -> nil[permalink][rdoc]文字列か整数で指定された str_or_int を自身に書き戻します。 nil を返します。
何回でも書き戻すことが可能です。 現在位置が自身のサイズよりも大きい場合は、自身をリサイズしてから、ch を書き戻します。
s = StringIO.new("hoge")
s.pos = 1
s.ungetc("H")
p s.string # => "Hoge"
p s.pos # => 0
s = StringIO.new("hoge")
s.pos = 1
s.ungetc("H".ord)
p s.string # => "Hoge"
p s.pos # => 0
s = StringIO.new("hoge")
s.pos = 4
s.ungetc("HOGE")
p s.string # => "hogHOGE"
p s.pos # => 3
s = StringIO.new("hoge")
s.pos = 8
s.ungetc("A")
p s.string # => "hoge\000\000\000A"
p s.pos # => 7
write(obj) -> Integer[permalink][rdoc]自身に obj を書き込みます。obj が文字列でなければ to_s による文字列化を試みます。 書き込まれた文字列の長さを返します。
全ての出力メソッドは、最終的に「write」という名のメソッドを呼び出すので、 このメソッドを置き換えることで出力関数の挙動を変更することができます。
a = StringIO.new("hoge", 'r+')
a.write("aaa") #=> 3
a.string #=> "aaae"