#!/usr/bin/env ruby # coding: utf-8 require 'cgi' c = CGI.new(:accept_charset => "UTF-8") # データファイルが別の文字コードかもしれないので kconv の toutf8 メソッドを # 用いて utf-8 に統一して正規表現マッチを行なう require 'kconv' db = {} open("syllabus.txt", "r") do |df| #データベース読み取り処理は全く同じ while line = df.gets line = line.toutf8 if /^科目名:\s*(.*)/ =~ line key = $1 db[key] = Hash.new elsif /^(\S+):\s*(.*)/ =~ line db[key][$1] = $2 end end end opts = db.collect {|kamoku, info| info["開講時期"] }.uniq.collect {|j| ""}.join("\n") # HTMLヘッダと入力フォーム出力 print("Content-type: text/html; charset=utf-8 科目検索

科目検索

検索条件を入力して下さい。

開講時期
担当教員

') # 検索パターンはHTMLフォームへの入力値を取得する term = c["jiki"] whom = c["kyoi"] if term>"" or whom>"" # 検索条件の最低1つが入力されていたら if term > "" # 開講時期指定に何か文字列を入れたなら ptn = Regexp.new(term) # 文字列を正規表現に変換 db = db.select {|k, v| ptn =~ v["開講時期"]} end if whom > "" # 担当教員指定に何か文字列を入れたなら ptn = Regexp.new(whom) # 文字列を正規表現に変換 db = db.select {|k, v| ptn =~ v["担当教員"]} end puts("

該当科目一覧

") printf("

検索語: 開講時期=[%s],担当教員=[%s]

", term, whom) puts("") db.each {|k, h| printf("\n", k) h.each {|key, value| printf("\n", key, value) } } puts("
%s
%s%s
") end puts(" ")