実践的な処理

プログラムの例

以下のプログラムをblood.rbという 名前で作成・保存し、実行してみよう。

#
# 血液型占い
#

# # より後ろに書いてあるのはコメントでプログラム実行には関係ない。
# 面倒なら入力しなくても構わない。

print "あなたの血液型は?: "
btype = gets			# データを読む。

if /ab/i =~ btype
  print "器用ですか?\n"
elsif /a/i =~ btype
  print "まめですか?\n"
elsif /b/i =~ btype
  print "熱血ですか?\n"
elsif /o/i =~ btype
  print "大きいですか?\n"
else
  print "まじめにやってね\n"
end

基本の基本

上記のプログラムの解釈に必要な基本的なこと

パターンマッチ(正規表現)

Rubyでは、

/パターン/ =~ 文字列

という式で、照合したい文字列に「パターン」があるか検査できる。 利用できるパターンの書き方のことを正規表現という。

正規表現の詳細

Rubyで正規表現のパターンを指定するには、

/パターン/

とプログラム中に直接パターンを書くか、

Regexp.new(文字列)

と文字列から正規表現パターンを作成する。

テキストによるデータ表現

レコードとフィールド

我々が日常的に利用する「データ」は多くの場合 表形式で表現できる。これは全てのデータが同じ順番で 同じ項目の順番で書かれたものという前提が置ける。

全ての項目が揃った1単位のデータのことをレコードという、 レコードの中にあるひとつひとつの項目のことをフィールドという。 たとえば、電話帳のデータでいえば

漢字氏名 カタカナ氏名 電話番号その1 電話番号その2 メイルアドレスその1 メイルアドレスその2 住所

の全体を「レコード」、漢字氏名やカタカナ氏名などの最小項目単位を 「フィールド」という。表計算ソフトなどでは1レコードを1行に、 1フィールドを1セルに書き込んで表現する。表計算ソフトなどでは データの集合を保存するときにはデフォルトでそのソフト固有の保存形式で 記録している。このため、なんらかのデータを専用ソフトで作成して ファイルに保存したものは、その保存形式に対応したソフトを使わない 限り開くことができない。

CSV形式

複数のフィールドをフィールドごとにカンマ(,)で区切り、 1レコードを1行におさめたテキストファイル形式をCSV形式という(Comma Separated Value)。CSV形式はアプリケーションに依存しない一般的な データファイル形式で、データ処理を行なうプログラムであれば ほぼ全てのソフトウェアから利用できる。このため、誰にでも参照して もらいたいデータファイルはCSV形式にして保存・受け渡しするのが 基本である。

CSV形式は

ようにする。フィールドに空白文字かカンマを含む文字列が来るときは 必ずダブルクォーテーションで括る。たとえば、

という4つのフィールドを表すときは

Hello,123,"456","Hello, world"

のように記す。

CSV形式で保存しておけば、どんなプログラムでも開けるし、コンピュータが あり続ける間いつまでもそのまま利用できる。

巨大データベースも楽々処理

/home/staff/yuuji/zip_jp.txt は日本全国の郵便番号をCSV 形式で記録したファイルである。まずは中味を見てみよう。ktermで以下のよう にコマンドを実行する。

% less /home/staff/yuuji/zip_jp.txt

SPCで一画面進み、bで一画面戻る、 qで終了。

このデータベースから、市内(町内)の郵便番号を検索するプログラムを作っ てみよう。

  1. プログラムを起動すると酒田市の町名(地区名)を聞いて来る
  2. 知名を入力すると該当する郵便番号の行を表示する

これを行なうプログラム postal.rb

$KCODE='e'
city='酒田市'
cityrx=Regexp.new(city)

printf "%sの町名は: ", city
town = gets.chomp
townrx = Regexp.new(town)

open("/home/staff/yuuji/zip_jp.txt", "r") do |z|
  while line=z.gets
    if cityrx =~ line && townrx =~ line
      print line
    end
  end
end

city変数のところを好きな市町村名に変えて試してみよう。

自分だけのデータベースを作ろう

CSV形式にしなくとも、「1行に1レコード」という形式にすれば そこから検索するプログラムを作るのは簡単である。

自動日記システムの紹介


(C)2005 OKOMA Lab. koeki-u.ac.jp