裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Julia の小ネタ--032 IO バッファー

2021年08月25日 | ブログラミング

入力バッファー

複数行の文字列

a ="""
10 200
abc def
xyz
"""

a は "10 200\nabc def\nxyz\n" という文字列と同じ。つまり,改行文字 "\n" が含まれる。

文字列を IO バッファーに設定する。

io = IOBuffer(a)
#=
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=19, maxsize=Inf, ptr=1, mark=-1)
=#

io から readlines() で,全てを入力する。
改行で区切って,文字列ベクトルとして入力される。

readlines(io)
#=
3-element Vector{String}:
 "10 200"
 "abc def"
 "xyz"
=#

readline() では一行ずつ入力される。

io = IOBuffer(a)
readline(io) # "10 200"
readline(io) # "abc def"
readline(io) # "xyz"
readline(io) # "" 最終行まで読み込んだ後は空がかえされるだけ

前もって読み込む行がどのようになっているかわかっているなら,普通の readline(stdin) と同じように扱える。 

io = IOBuffer(a)
parse.(Int, split(readline(io)))
#=
2-element Vector{Int64}:
  10
 200
=#

出力バッファー

IOBuffer で data 引数を省略すると出力バッファーになる。

io = IOBuffer()
#=
IOBuffer(data=UInt8[...], readable=true, writable=true, seekable=true, append=false, size=0, maxsize=Inf, ptr=1, mark=-1)
=#

出力バッファーに書き出すのは write() である。
write() するごとに,内容が追加される。改行文字は自動的には付かない。

write(io, "hello, world!")
write(io, "goodbye")

バッファーの中身を取り出すのは take!()。ただし,take!() で得られるのは Vector{UInt8} なので,普通の文字列にするには String() を適用する。

String(take!(io)) # "hello, world!goodbye"

取り出した後は,出力バッファーは空になる。

上に引き続いてすぐに。

String(take!(io)) # ""

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村