$5 ファイルからの入力

5-1 ファイルからの入力

ここでは、ファイルからのデータ入力について解説します。
ファイルからの入力とは、ファイルに書いてある文字を読むことですけど、 普通は、全体を一度に読むか、一行づつ読み込むことになります。 ある部分だけ読み込むというのは、ちょっと難しいようです。

まずは、基本的なプログラムを作ってみましょう。

  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

Next: 5-2 タブ区切りデータから表をつくる

Previous: 4-1 簡単なパズル

Contents


Foundation of CGI Page

春風はるか haruka@harukaze.net