ここでは、ファイルからのデータ入力について解説します。
ファイルからの入力とは、ファイルに書いてある文字を読むことですけど、
普通は、全体を一度に読むか、一行づつ読み込むことになります。
ある部分だけ読み込むというのは、ちょっと難しいようです。
まずは、基本的なプログラムを作ってみましょう。
1: #! /usr/local/bin/ruby
2:
3: file = open('text', 'r')
4: lines = file.readlines()
5:
6: print "Content-type: text/html\n\n"
7:
8: for line in lines
9: print line
10: end
3行目で、「text」というファイルを「file」というオブジェクトとして開きます。
ここで、最後の「'r'」というのが「read(読み込み用)」としてopenする、という意味になります。
開いたファイルの内容は、4行目の「file.readlines()」というメソッドによって取り出されて、
各行が要素となる配列 linesがつくられます。いいかえると、配列linesの一つの要素が元のファイルの一行になります。
8行目で、ループを使って配列の各要素、つまり各行をprintします。
本当は、単にファイルの内容をそのままprintしたいだけなら、7行目以降に、 「print lines」と書くだけで出来ますが、実際のプログラムでは、各行に手を加えることになると思うので、 上のように、配列の要素を取り出して操作する、というのが標準的でしょう。
というふうに、ほとんどPythonと同じです。解説もコピー&ペーストで楽してます。 ちなみに、rubyでは、リストをそのままprintしても、日本語の文字化けは無いようです。
ファイル全体をひとつの文字列として読み込むには、これもPythonと同じです。
1: #! /usr/local/bin/ruby
2: file = open('text', 'r')
3: print "Content-type: text/html\n\n"
4: print file.read()
さて、今度は、ファイルから一行づつ読み込む例を作ってみましょう。
ファイルから一行読み込むのは「file.readline()」というメソッドを使います。
Rubyの場合は「while(line = file.readline())」という書き方で、
自動的にファイルの終了でループが終わります。そして変数lineを使うことで、各行をもれなく取り出せます。
具体的には次のようになります。
1: while(line = file.readline()) 2: print Line 3: end