重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

たとえば、

Class Hoge
initialize(arg)
 @data=arg
end

def read(size)
 @dataからsize分読んで返す。
end
end

みたいなクラスを
hoge=Hoge.new(aaa)
puts hoge.read(1024)
puts hoge.read(1024)

みたいに使いたいです。

指定したバイト分読むってどうするんですか?

ご教授の程、宜しくお願いいたします。

A 回答 (2件)

IO#readを使って全部の内容を読み込んでいるので、aaaはString。


文字列の特定の箇所を取り出すには
[nth, len] による指定や、slice(nth, len) メソッドが使えます。
どこから読むかを @startとでもしておいて
def read(size)
 ret=@data[@start,size]
 @start+=size
return ret
end
@dataを破壊してもいいなら、先頭からsizeだけ削除していくとか。
    • good
    • 0
この回答へのお礼

Kmeeさん、ご回答ありがとうございました。

お礼日時:2012/01/28 19:18

> hoge=Hoge.new(aaa)


のaaaは何ですか?

IOクラスとその派生ならIO#readとか、文字列ならスライスとか、aaaのクラス次第でやりかたは変わります。

この回答への補足

kmeeさん、ご回答有難うございます。

aaaは、

f=File::open(’hoge’,'rb')
aaa=f.read
f.close

のような感じです。

バイナリデータって事ですかね。

その後、each_byteでぐるぐる回せばよいかと、思ったのですが、もうすこし良い方法があったら知りたいです。

補足日時:2012/01/26 11:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!