第6回 正規表現と検索 レポート課題 氏名:高橋凌太 学籍番号:C1111004 クラス:英語1 コース:地域共創 1. A.私の誕生日は、1992年8月18日である。これを、まず2進数に変換する。 2進数に変換するには、数字を2で割り続け、余りとなった数字を並べれば良い。 なお、2進数で表記するとき数字は、下から読む。 1992=0d1992 8=0d8 18=0d18 1992/2=996 余り0 8/2=4 余り0 18/2=9 余り0 996/2=498 余り0 4/2=2 余り0 9/2=4 余り1 498/2=249 余り0 2/2=1 余り0 4/2=2 余り0 249/2=124 余り1 1/2=0 余り1 2/2=1 余り0 124/2= 62 余り0 1/2=0 余り1 62/2= 31 余り0 31/2= 15 余り1 15/2= 7 余り1 7/2= 3 余り1 3/2= 1 余り1 1/2= 0 余り1 0b=11111001000 0b=1000 0b=10010 よって、0d1992年 0d8月 0d18日は 0b11111001000年 0b1000月 0b10010日 と表せる。 次に、16進数に変換する。16進数に変換するには、上の2進数を4けたづつ区切り、 それぞれを16進数に対応させる。 0b11111001000 0b1000 0b=10010 = 0111、1100、1000 = 8 = 00001、0010 = 7 、 c 、 8 = 1 、2 0x= 7c8 0x= 8 0x= 12 よって、0d1992年 0d8月 0d18日は 0x 7c8年 0x8月 0x12日 と表せる。 参考文献 2010年度 基礎プログラミング I 第6回 正規表現と検索 先輩レポート http://roy/~madoka/2010/r1/06/rpt/crt.html 基礎プログラミングI 第9回 16進数・ASCIIコード 神田直弥 http://roy/~naoya/ruby/9.html B.誕生日 1992年 8月 18日 を計算する 0dの場合:1992 + 8 + 18 =2018 0xの場合: 7c8 + 8 + 12 0d =7・12・8 + 8 + 18 #10進数に変換 =0111・1100 + 1000 +10010 #2進数に変換 0111 0001 +1100 + 1000 + 0010 #合算する = 10011 1000 0011 = 1001110000011 = 0001、0011、1000、0011 #4つづつ区切る = 1 3 8 3 #それぞれ対応している16進数にあてはめる = 1383 0d = 2018,0x = 1383 となる。 参考文献 基礎プログラミングI 第9回 16進数・ASCIIコード 神田直弥 http://roy/~naoya/ruby/9.html 2進数と16進数の計算 http://www.geocities.jp/hideohara777/hard/keisan.html C.printf文にSTDERRを付ける理由は、プログラム作成時、プログラムにどこか 誤りがある場合、プログラムがKterm上でどこに誤りがあるのかを示すためであ る。 2. 使用したプログラム data_c111100.dat A.岩手県にある私の出身市の駅から県庁所在地の駅までの駅名、その駅がどの 市町村にあるのか、駅の開業年が分かるプログラム。 B.岩手 花巻市 1890 花巻 Hanamaki 岩手 花巻市 1932 花巻空港 Hanamakikuukou 岩手 花巻市 1893 石鳥谷 Ishidoriya 岩手 紫波町 1890 日詰 Hizume 岩手 紫波町 1998 紫波中央 Shiwatyuou 岩手 紫波町 1949 古館 Furudate 岩手 矢巾町 1898 矢幅 Yahaba 岩手 盛岡市 1950 岩手飯岡 Iwateiioka 岩手 盛岡市 1915 仙北町 Senbokutyou 岩手 盛岡市 1890 盛岡 Morioka C.その駅がどの市町村にあるのか、また開業した年を何年なのかわ分類してみ たい D.このプログラムの検索パターンについて 一.egrep "岩手" data_c111100.datを実行してみる。結果は全ての駅が検索にひっ かかると予想する。 二.egrep "花巻|盛岡" data_c111100.datを実行してみる。結果は、花巻駅と 盛岡駅が 検索がひっかかると予想する。 三.egrep "[1890-1900]" data_c111100.datを実行する。これで1890年から1900 年に開業した駅、花巻駅、石鳥谷駅、日詰駅、矢幅駅、盛岡駅が検索にひっ かかると予想する。 四.egrep "y|k+a" data_c111100.datを実行する。結果は、英語で表記したときy またはkの後にaがくる石鳥谷駅、岩手飯岡駅、盛岡駅が検索にひっかかると 予想する。 五.egrep "e$" data_c111100.datを実行する。結果は、英語で表記したとき最 後に"e"がくる日詰駅、古館駅が検索にひっかかると予想する。 六.egrep "^H|S" data_c111100.datを実行する。結果は、英語で表記したとき 最初に"H"か"S"がくる花巻駅、花巻空港駅、日詰駅、紫波中央駅、仙北町駅が検索に ひっかかると予想する。 七.egrep "花巻" data_c111100.datを実行する。結果は、"花巻"と駅名がつく 花巻駅、花巻空港駅が検索にひっかかると予想する。 八.egrep -i "Hi[a-z]ume" data_c111100.datを実行する。結果は、英語表 記で"Hi[-]ume"と表記れるものが検索にひっかかると予想する。 九.egrep "*a" data_c111100.datを実行する。結果は、繰り返し"a"が使われ ていない日詰駅、仙北町駅以外、全て検索にひっかかると予想する。 十.egrep "町" data_c111100.datを実行する。結果は、"町"がつく日詰駅、紫 波中央駅、古館駅、矢幅駅、仙北町が検索にひっかかると予想する。 E.実行した結果 一.pan{c111100}% egrep "岩手" data_c111100.dat [~/Ruby] 岩手 花巻市 1890 花巻 Hanamaki 岩手 花巻市 1932 花巻空港 Hanamakikuukou 岩手 花巻市 1893 石鳥谷 Ishidoriya 岩手 紫波町 1890 日詰 Hizume 岩手 紫波町 1998 紫波中央 Shiwatyuou 岩手 紫波町 1949 古館 Furudate 岩手 矢巾町 1898 矢幅 Yahaba 岩手 盛岡市 1950 岩手飯岡 Iwateiioka 岩手 盛岡市 1915 仙北町 Senbokutyou 岩手 盛岡市 1890 盛岡 Morioka 二. pan{c111100}% egrep "花巻|盛岡" data_c111100.dat [~/Ruby] 岩手 花巻市 1890 花巻 Hanamaki 岩手 花巻市 1932 花巻空港 Hanamakikuukou 岩手 花巻市 1893 石鳥谷 Ishidoriya 岩手 盛岡市 1950 岩手飯岡 Iwateiioka 岩手 盛岡市 1915 仙北町 Senbokutyou 岩手 盛岡市 1890 盛岡 Morioka 三. pan{c111100}% egrep "[1890-1900]" data_c111100.dat [~/Ruby] 岩手 花巻市 1890 花巻 Hanamaki 岩手 花巻市 1932 花巻空港 Hanamakikuukou 岩手 花巻市 1893 石鳥谷 Ishidoriya 岩手 紫波町 1890 日詰 Hizume 岩手 紫波町 1998 紫波中央 Shiwatyuou 岩手 紫波町 1949 古館 Furudate 岩手 矢巾町 1898 矢幅 Yahaba 岩手 盛岡市 1950 岩手飯岡 Iwateiioka 岩手 盛岡市 1915 仙北町 Senbokutyou 岩手 盛岡市 1890 盛岡 Morioka 四. pan{c111100}% egrep "y|k+a" data_c111100.dat [~/Ruby] 岩手 花巻市 1893 石鳥谷 Ishidoriya 岩手 紫波町 1998 紫波中央 Shiwatyuou 岩手 盛岡市 1950 岩手飯岡 Iwateiioka 岩手 盛岡市 1915 仙北町 Senbokutyou 岩手 盛岡市 1890 盛岡 Morioka 五. pan{c111100}% egrep "e$" data_c111100.dat [~/Ruby] 岩手 紫波町 1890 日詰 Hizume 岩手 紫波町 1949 古館 Furudate 六. pan{c111100}% egrep "^H|S" data_c111100.dat [~/Ruby] 岩手 紫波町 1998 紫波中央 Shiwatyuou 岩手 盛岡市 1915 仙北町 Senbokutyou 七. pan{c111100}% egrep "花巻" data_c111100.dat [~/Ruby] 岩手 花巻市 1890 花巻 Hanamaki 岩手 花巻市 1932 花巻空港 Hanamakikuukou 岩手 花巻市 1893 石鳥谷 Ishidoriya 八. pan{c111100}% egrep "Hi[a-z]ume" data_c111100.dat [~/Ruby] 岩手 紫波町 1890 日詰 Hizume 九. pan{c111100}% egrep "*a" data_c111100.dat [~/Ruby] egrep: 構文エラー 十. pan{TAKAHASHI Ryota}% egrep "町" data_c111100.dat [~/Ruby] 岩手 紫波町 1890 日詰 Hizume 岩手 紫波町 1998 紫波中央 Shiwatyuou 岩手 紫波町 1949 古館 Furudate 岩手 矢巾町 1898 矢幅 Yahaba 岩手 盛岡市 1915 仙北町 Senbokutyou F.結果の考察 一.予想と結果は一致した。 二.予想に反していた。駅名だけでなく、市町村の名前でも検索される。そこで、 egrep "空港|館" data_c111100.datを実行してみる。 pan{c111100}% egrep "空港|館" data_c111100.dat [~/Ruby] 岩手 花巻市 1932 花巻空港 Hanamakikuukou 岩手 紫波町 1949 古館 Furudate プログラムの中で、"空港"と"館"のつく駅名だけが検索されたので、正しいとい える。 三.予想に反していた。結果的に"1、8、9、0、"がつく駅(今回の場合全て)がひっ かかってしまった。そこで、egrep "189." data_c111100.datを実行してみ る。 pan{c111100}% egrep "189." data_c111100.dat [~/Ruby] 岩手 花巻市 1890 花巻 Hanamaki 岩手 花巻市 1893 石鳥谷 Ishidoriya 岩手 紫波町 1890 日詰 Hizume 岩手 矢巾町 1898 矢幅 Yahaba 岩手 盛岡市 1890 盛岡 Morioka よって、予想した結果となった。 四.予想に反し、紫波中央駅と仙北駅もひっかかってしまった。そこで、 egrep "ka|ya" data_c111100.datを実行してみた。 pan{c111100}% egrep "ka|ya" data_c111100.dat [~/Ruby] 岩手 花巻市 1893 石鳥谷 Ishidoriya 岩手 盛岡市 1950 岩手飯岡 Iwateiioka 岩手 盛岡市 1890 盛岡 Morioka よって、予想した結果となった。 五.予想と結果は一致した。 六.予想に反し、花巻駅、花巻空港駅、日詰駅が表示されなかった。そこで、 "^"を取り除き、egrp "H|S" data_c111100.datを実行してみた。 pan{c111100}% egrep "H|S" data_c111100.dat [~/Ruby] 岩手 花巻市 1890 花巻 Hanamaki 岩手 花巻市 1932 花巻空港 Hanamakikuukou 岩手 紫波町 1890 日詰 Hizume 岩手 紫波町 1998 紫波中央 Shiwatyuou 岩手 盛岡市 1915 仙北町 Senbokutyou よって、予想した結果となった。 七.予想に反し、石鳥谷駅もひっかかってしまった。そこで、ローマ字表記の egrep "Hanamaki" data_c111100.datを実行してみた。 pan{c111100}% egrep "Hanamaki" data_c111100.dat [~/Ruby] 岩手 花巻市 1890 花巻 Hanamaki 岩手 花巻市 1932 花巻空港 Hanamakikuukou よって、予想した結果となった。 八.日詰駅の英語表記が、"du"なのか"zu"なのか"tu"なのか分からない場合を 想定したので、結果は正しいといえる。 九.予想に反し、エラーが発生してしまった。*(asterisk)の前に何も文字が なかったことが原因と思われる。そこで、 egrep "a" data_c111100.datを実行してみた。 pan{c111100}% egrep "a" data_c111100.dat [~/Ruby] 岩手 花巻市 1890 花巻 Hanamaki 岩手 花巻市 1932 花巻空港 Hanamakikuukou 岩手 花巻市 1893 石鳥谷 Ishidoriya 岩手 紫波町 1998 紫波中央 Shiwatyuou 岩手 紫波町 1949 古館 Furudate 岩手 矢巾町 1898 矢幅 Yahaba 岩手 盛岡市 1950 岩手飯岡 Iwateiioka 岩手 盛岡市 1890 盛岡 Morioka よって、予想した結果となった。 十.予想と結果は一致した。 G.利用した正規表現 |(vertical line)・・・またはの意味。2択または3択、それ以上の時使い勝手 が良い。 [](braket) ・・・[](braket)内の文字どれかで検索。 .(period) ・・・.(period)の前に文字をおくことで、あやふやになっ ている1文字を探す。 +(plus) ・・・直前の文字と+(plus)の直後の文字を組み合わせ検索。 何度出現しても可。 $(dollar) ・・・末尾の文字を検索。 ^(caret) ・・・先頭の文字を検索。 [a-z] ・・・アルファベット、aからzまでの中から1文字をあては め、前後の文字列と組み合わせ、検索。 *(asterisk) ・・・文字が何度でも出現することを許可する。 *(asterisk)の前になんらかの文字列がなければ、意 味をなさない。 参考文献 基礎プログラミング I 第 6 回 (正規表現と検索) 「うろ覚えの検索」 http://roy/~madoka/2012/r1/06/r1_06_03_theme_01_patternmatching.html 基礎プログラミング I 第 6 回 (正規表現と検索) 「何回か繰り返されている 文字を探 したい」 http://roy/~madoka/2012/r1/06/r1_06_04_theme_02_repetation.html 基礎プログラミング I 第 6 回 (正規表現と検索) 「いくつかある候補を探したい場合」 http://roy/~madoka/2012/r1/06/r1_06_05_theme_03_or.html 基礎プログラミング I 第 6 回 (正規表現と検索) 「1 文字違い」 http://roy/~madoka/2012/r1/06/r1_06_06_theme_04_onecharacter.html 2010年度基礎プログラミングI 先輩レポート http://roy/~madoka/2010/r1/06/rpt/c109001.txt http://roy/~madoka/2010/r1/06/rpt/c109030.txt 以上全て、西村まどか及び諸先輩方 著 Wikipedia 花巻駅 http://ja.wikipedia.org/wiki/%E8%8A%B1%E5%B7%BB%E9%A7%85 花巻空港駅 http://ja.wikipedia.org/wiki/%E8%8A%B1%E5%B7%BB%E7%A9%BA%E6%B8%AF 石鳥谷駅 http://ja.wikipedia.org/wiki/%E7%9F%B3%E9%B3%A5%E8%B0%B7%E9%A7%85 日詰駅 http://ja.wikipedia.org/wiki/%E6%97%A5%E8%A9%B0%E9%A7%85 紫波中央駅 http://ja.wikipedia.org/wiki/%E7%B4%AB%E6%B3%A2%E4%B8%AD%E5%A4%AE%E9%A7%85 古館駅 http://ja.wikipedia.org/wiki/%E5%8F%A4%E9%A4%A8%E9%A7%85 矢幅駅 http://ja.wikipedia.org/wiki/%E7%9F%A2%E5%B9%85%E9%A7%85 岩手飯岡駅 http://ja.wikipedia.org/wiki/%E5%B2%A9%E6%89%8B%E9%A3%AF%E5%B2%A1%E9%A7%85 仙北町駅 http://ja.wikipedia.org/wiki/%E4%BB%99%E5%8C%97%E7%94%BA%E9%A7%85 盛岡駅 http://ja.wikipedia.org/wiki/%E7%9B%9B%E5%B2%A1%E9%A7%85 3.感想 今回のプログラムは単調な作業が多かったので、ミスをしないよう集中し行っ た。身の回りで正規表現を使われているものとして、例えば、携帯電話やイン ターネットでの検索や予測変換、また中古車や新幹線などでの発券で使われる 価格帯の検索に使われると予測される。 作成したプログラム data_c111100.dat