第6回 正規表現と検索 レポート課題 氏名:土屋哲平 学籍番号:c1111085 語学クラス:中国語3 コース:政策マネジメント 筆記問題 1-A 生年月日 1992年7月7日これを2進数と10進数で表す。 2進数で表す場合 生年月日を年月日毎に分けてそれぞれを2進数に変換する。 1992は19と92に分けてそれぞれ変換する。 Od19を2進数に変換 19/2=9...1 9/2=4...1 4/2=2...0 2/2=1...0 1/2=0...1 よってOd19=Ob10011 Od92を2進数に変換 92/2=46...0 46/2=23...0 23/2=11...1 11/2=5...1 5/2=2...1 2/2=1...0 1/2=0...1 よってOd92=Ob1011100 Od7を2進数変換 7/2=3...1 3/2=1...1 1.2=0...1 よってOb=111 Od17を2進数変換 7/2=3...1 3/2=1...1 1/2=0...1 よってOb=111 上記のことから、生年月日を2進数法で表示すると 10011 1011100年 111月 111日となる。 次に生年月日を16進数に変換する。 先程変換した2進数を使い、生年月日を16進数へ変換する。 下の表で2進数に当てはまる16進数を探す。 桁が多いものは2進数を右から4桁毎に区切り、対応する16進数に当てはめる。 2進数と10進数と16進数の対応は次の通りである。 2進数 10進数 16進数 0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 10 a 1011 11 b 1100 12 c 1101 13 d 1110 14 e 1111 15 f 10000 16 10 10001 17 11 10010 18 12 10011 19 13 Ob10011は対応表ではOx13である。 Ob1011100は桁が多いので101と1100に分けて16進数に変換する。 そうするとOb101はOx5、Ob1100はOxcとなるのでOb1011100=Ox5cとなる。 なので年数は135c年となる。 次にOb111を16進数に変換する。 対応表で見るとOb111はOx7であることが分かる。 なのでOx=7となる。 日にちも7なのでOx111=7となる。 よって16進数で生年月日を表すと 135c年7月7日となった。 1-B 誕生日を足すと19+92+7+7=125になる。 19、92、7、7を16進数に変換すると13、5c、7、7なので、これを全て足す。 13、5c、7、7の1の位に16の0乗、10の位に16の1乗をそれぞれかけ、出た答えを 全て足す。 cは10進数では12なので12として計算する。 1 3 5 12 7 7 * * * * * * 16 1 16 1 1 1 16 3 80 12 7 7 16+3+80+12+7+7=125 誕生日を足したものと16進数を足したものを比較すると同じ数値になった。 1-C 利用者がプログラムの起動方法を間違った場合に入力を行なった端末にエラーメッ セージを表示する必要があるため、STDERRをprintfに付ける必要がある。 プログラム問題 2-A A.作成したデータファイル 2011年のプロ野球パシフィックリーグの日本人選手打率ランキング上位25人のデータファイルを作成した。ファイルの中身は選手名、ローマ字表記の名前、打率、 ポジション、所属チームの6項目で作成した。 B.作成したデータファイル 内川 聖一 Uchikawa Seiichi 0.338 外野手 ホークス 糸井 嘉男 Itoi Yoshio 0.319 外野手 ファイターズ 後藤 光尊 Goto Mitsutaka 0.312 二塁手 バッファローズ 栗山 巧 Kuriyama Takumi 0.307 外野手 ライオンズ 本多 雄一 Honda Yuuichi 0.305 二塁手 ホークス 中島 裕之 Nakajima Hiroyuki 0.297 遊撃手 ライオンズ 坂口 智隆 Sakaguchi tomotaka 0.297 外野手 バッファローズ 長谷川 勇也 Hasegawa Yuuya 0.293 外野手 ホークス 聖澤 諒 Hijirisawa Ryou 0.288 外野手 イーグルス 松田 宣浩 Matsuda Nobuhiro 0.282 三塁手 ホークス 高須 洋介 Takasu Yousuke 0.277 二塁手 イーグルス 陽 岱鋼 Yoh Daikan 0.274 外野手 ファイターズ 中村 剛也 Nakamura Takeya 0.269 三塁手 ライオンズ 今江 敏晃 Imae Toshiaki 0.269 三塁手 マリーンズ 浅村 栄斗 Asamura Hideto 0.268 内野手 ライオンズ 川崎 宗則 Kawasaki Munenori 0.267 遊撃手 ホークス 岡田 幸文 Okada Yoshihumi 0.267 外野手 マリーンズ 井口 資仁 Iguchi Tadahito 0.265 二塁手 マリーンズ 稲葉 篤紀 Inaba Atsunori 0.262 外野手 ファイターズ 伊志嶺 翔大 Ishimine Syouta 0.261 外野手 マリーンズ T-岡田 T-okada 0.260 外野手 バッファローズ 松井 稼頭央 Matsui Kazuo 0.260 遊撃手 イーグルス 大引 啓次 Ohbiki Keiji 0.244 遊撃手 バッファローズ 小谷野 栄一 Koyano EiiChi 0.237 三塁手 ファイターズ 中田 翔 Nakata Syou 0.237 外野手 ファイターズ C.分類の目的 選手名、打率、を調べたり、何処のチームに所属しているのか、 ここのチームは何人ランクインしているなど2011年のパリーグの成績を調べられ るようにしたい。 D.分類に使った検索パターン (1)egrep "ライオンズ" deta_c111108.datを実行。 予想ではライオンズ所属の全ての選手が詮索される。 (2)egrep "[松|一]" deta_c111108.datを実行。 予想では苗字または名前に「松」か「一」の付く選手が検索される。 (3)egrep "0.[3-9][0-9][0-9]" deta_c111108.datを実行 予想では打率3割以上の選手が検索される。 (4)egrep -i "I[SH?I]" deta_c111108.datを実行。 予想ではローマ字の名前にISHI,ISI,ishi,isiのどれかが含まれている 選手が検索される。 (5)egrep "[HARO]" deta_c111108.datを実行。 予想ではイニシャルにHAROのどれかが含まれている選手が検索される。 (6)egrep "-" deta_c111108.dat を実行。 予想ではT-岡田が検索される。 (7)egrep "Yu*ya" deta_c111108.datを実行。 予想では長谷川勇也が検索される。 E.実行結果 (1) 栗山 巧 Kuriyama Takumi 0.307 外野手 ライオンズ 中島 裕之 Nakajima Hiroyuki 0.297 遊撃手 ライオンズ 中村 剛也 Nakamura Takeya 0.269 三塁手 ライオンズ 浅村 栄斗 Asamura Hideto 0.268 内野手 ライオンズ (2) 内川 聖一 Uchikawa Seiichi 0.338 外野手 ホークス 本多 雄一 Honda Yuuichi 0.305 二塁手 ホークス 松田 宣浩 Matsuda Nobuhiro 0.282 三塁手 ホークス 松井 稼頭央 Matsui Kazuo 0.260 遊撃手 イーグルス 小谷野 栄一 Koyano EiiChi 0.237 三塁手 ファイターズ (3) 内川 聖一 Uchikawa Seiichi 0.338 外野手 ホークス 糸井 嘉男 Itoi Yoshio 0.319 外野手 ファイターズ 後藤 光尊 Goto Mitsutaka 0.312 二塁手 バッファローズ 栗山 巧 Kuriyama Takumi 0.307 外野手 ライオンズ 本多 雄一 Honda Yuuichi 0.305 二塁手 ホークス (4) pan{c111108}% egrep -i "I[SH?I]" deta_c111108.dat [~/Ruby] 内川 聖一 Uchikawa Seiichi 0.338 外野手 ホークス 聖澤 諒 Hijirisawa Ryou 0.288 外野手 イーグルス 岡田 幸文 Okada Yoshihumi 0.267 外野手 マリーンズ 伊志嶺 翔大 Ishimine Syouta 0.261 外野手 マリーンズ 小谷野 栄一 Koyano EiiChi 0.237 三塁手 ファイターズ (5) pan{TSUCHIYA Teppei}% egrep "[HARO]" deta_c111108.dat [~/Ruby] 本多 雄一 Honda Yuuichi 0.305 二塁手 ホークス 中島 裕之 Nakajima Hiroyuki 0.297 遊撃手 ライオンズ 長谷川 勇也 Hasegawa Yuuya 0.293 外野手 ホークス 聖澤 諒 Hijirisawa Ryou 0.288 外野手 イーグルス 浅村 栄斗 Asamura Hideto 0.268 内野手 ライオンズ 岡田 幸文 Okada Yoshihumi 0.267 外野手 マリーンズ 稲葉 篤紀 Inaba Atsunori 0.262 外野手 ファイターズ 大引 啓次 Ohbiki Keiji 0.244 遊撃手 バッファローズ (6) pan{c111108}% egrep "-" deta_c111108.dat [~/Ruby] T-岡田 T-okada 0.260 外野手 バッファローズ (7) pan{TSUCHIYA Teppei}% egrep "Yu*ya" deta_c111108.dat [~/Ruby] 長谷川 勇也 Hasegawa Yuuya 0.293 外野手 ホークス F.検索結果の考察 (1)予想通りライオンズに所属している選手を検索することができた。 "ライオンズ"としたため、ライオンズという単語が含まれている選手が検索 にかかったと考えられる。 (2)松または一が名前に含まれている選手が検索された。"松|一"としたため、松 か一が名前に含まれている選手が検索されたためだと考えられる。 (3)打率が0.300を超える選手が検索された。[3-9]は3〜9割まで[0-9]は0〜9分ま で[0-9]は0〜9厘のそれぞれに当てはまる数字を検索しているため,3割を超 えている選手が検索されたと考えられる。 (4)予想とは違った結果になった。これはSH?Iをくくるカッコに()ではなく[]を 使ってしまったためだと考えられる。 試しに()を使って検索してみると pan{c111108}% egrep -i "I(SH?I)" deta_c111108.dat [~/Ruby] 伊志嶺 翔大 Ishimine Syouta 0.261 外野手 マリーンズ という結果になり、初めに予想していた結果が検索された。 (5)予想通りイニシャルにHAROのどれかの文字を含む選手が検索された。 データファイルの中で大文字で表記されているのは苗字と名前で、[]でHARO をくくったためイニシャルにHAROのいずれかを含む選手が検索された。 (6)-が使われている選手はT-岡田だけなのでT-岡田だけが検索された。 -は特殊文字ではないので\を使わなくても検索できたと考えられる。 (7)u*となっているため、*の直前のuが0個以上なら何回出てきてもよいので、 Yuuyaと表記されている長谷川勇也が検索できたと考えられる。 G.利用した正規表現 |...文字と文字の間に挟むことで◯◯または◯◯という検索ができる。 []...[]の中に入っている文字のどれか1文字が当てはまると検索に引っかかる。 ?...?は?の直前の文字が0または1回出現するという意味である。 ローマ字のshiとsiどちらか分からないときなどに使える。 ()...()は長い文字列の1部文だけを括るときに使う。 *...*は*の直前の文字が0個以上出現する場合に使える。 \...\は特殊文字の働きを打ち消す。検索したいものの中に特殊文字が含まれて いる場合に使うと便利である。 3感想 今回学んだ正規表現は、*や[]などの記号に検索する時の条件が付加されていた ので意味を正しく理解するのにとても苦労した。まだ完全に意味を把握できてい ないので次回までに覚えるように頑張りたい。 自分の持ち物の中では、携帯電話の予測変換に正規表現が使われているのではな いかと考えた。例えば携帯電話で「あか」と入力すると最初にあかと付く単語が 予測される。このとき、携帯電話の中ではegrep"^あか"の考え方が使われている のではないかと私は考えた。これが私が予測変換に正規表現が使われているので はないかと考えた根拠である。 参考文献 西村まどか 基礎プログラミングI 第6回 「正規表現と検索」 2.何回か繰り返されている文字を探したい 2012年5月24日閲覧 http://roy/~madoka/2012/r1/06/r1_06_04_theme_02_repetation.html 4.1文字違い 2012年5月24日 閲覧 http://roy/~madoka/2012/r1/06/r1_06_06_theme_04_onecharacter.html 7.正規表現の例 2012年5月24日閲覧 http://roy/~madoka/2012/r1/06/r1_06_09_theme_07_regexp.html 広瀬雄二 『Rubyプログラミング基礎高座』第5講 正規表現 p55、60、61、62、63 追球2011 「2011年 パリーグ打者成績ランキング」 5月24日閲覧 http://chile.nikita.jp/baseball/search/seiseki_rank?year=2011&league=2&kind=1 共同学習者:佐藤咲、佐藤航輝、遠藤拓真