StringIO


CGIのformのデータ
CGIをrubyを使って書くことがあるが、formのデータを取り込むときには、

data=cgi.params["data"].collect{|l| l.read}

というようにしている。しかし、一度readしてしまうと、もう読めなくなってしまう。これをなんとかしたかったのだが、これまでどうしたら良いかが分からなかった。調べてみたら、上のlのclassはStringIOというもので、文字列なんだけどIOとして扱えるものらしい。読み込んだデータをもとに、もう一度StringIOを作ってやれば良いのだろうということで、

cgi.params["data"]=data.collect{|l| StringIO.new(l)}

としてみたら、うまく行った。読み込むたびにこれをやるのも面倒だが。もっと良い方法があるのかも知れないが、これで動いているからまあ良いかな。