#!/usr/koeki/bin/ruby # coding: 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 STDERR.print("開講時期は(指定なしの場合は空で)?: ") term = gets.chomp STDERR.print("担当教員は(指定なしの場合は空で)?: ") whom = gets.chomp 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("【該当科目一覧】") db.each {|k, h| printf("%s %sの情報 %s\n", "="*20, k, "="*20) h.each {|key, value| printf("%s: %s\n", key, value) } }