第 6 回 正規表現と検索 レポート課題 氏名:浅沼佑香 学籍番号:C1110039 語学クラス:英語1 コース:社会福祉コース 1.A.私の誕生日は、1992年7月1日である。(10進数表示にしてある。) 生年月日を19・92・7・1と1992・7・1の2つの分け方でそれぞれ2進数、16進数に表 示した。結果は下の通りである。 <19・92・7・1> ー2進数表示ー 2進数は0と1の2つの数字で表すので、それぞれの数字を2で割る。出た答えの 余りを下から(↑の方向に)読むと、2進数で表すことができる。今回は、0b19、 0b92、0b7、0b1をそれぞれ2進数で表した。結果は下に表示したものである。 1)0d19 19/2=9…1 9/2=4…1 4/2=2…0 ↑上の方向に読む 2/2=1…1 1/2=0…1 答 0d19=0b11011 2)0d92 92/2=46…0 46/2=23…0 23/2=11…1 11/2= 5…1 ↑上の方向に読む 5/2= 2…1 2/2= 1…1 1/2= 0…1 答 0d92=0b1111100 3)0d7 7/2=3…1 3/2=1…1 ↑上の方向に読む 1/2=0…1 答 0d7=0b111 4)0d1 1/2=0…1 答 0d1=0b1 誕生日を2進数表示にすると、 1101111111001111年111月1日 になる。 ー16進数表示ー 16進数は、2進数4桁をまとめると16個の数を表すことができる。だから、それ ぞれ2進数表示で求めた数字を4桁ごとに区切り、16進数に直した。足りないと ころは0をおく。結果は下に表示したものである。 1)0b11011→00011011 0001と1011に分けることができる。 0001は16進数で1 1011は16進数でb よって、16進数では 1b である。 2)0b1111100→01111100 0111と1100に分けることができる。 0111は16進数で7 1100は16進数でc よって、16進数では 7c である。 3)0b111→0111 0111は16進数で7 よって、16進数では 7 である。 4)0b1→0001 0001は16進数で1 よって、16進数では 1 である。 誕生日を16進数表示にすると 1b7c年7月1日 になる。 <1992・7・1> 19・92・7・1と同様にやった。7と1は計算ずみなので、1992だけ表示する。 結果は下の通りである。 ー2進数表示ー 1)0d1992 1992/2=996…0 996/2=498…0 498/2=249…0 249/2=124…1 124/2= 62…0 62/2= 31…0 ↑下の方向から読む 31/2= 15…1 15/2= 7…1 7/2= 3…1 3/2= 1…1 1/2= 0…1 答 0d1992=0b11111001000 誕生日を10進数表示にすると 11111001000年111月1日となる。 ー16進数表示ー 0b11111001000→011111001000 0111と1100と1000に分けることができる。 0111は16進数で7 1100は16進数でc 1000は16進数で8 よって、16進数では 7c8 である。 誕生日を16進数表示にすると、 7c8年7月1日となる。 B.私の誕生日を19・92・7・1と1992・7・1で分けたときの16進数をそれぞれ 19+92+7+1と1992+7+1でそれぞれ足し、その足したものを10進数に戻した。 16進数で足したものと10進数に戻したものをそれぞれ比較した。 結果は下の通りである。 <19・92・7・1> ー16進数での和ー それぞれ16進数に直すと、 19→1b 92→7c 7→7 1→1 になる。bとcを10進数に直すと、b→11、c→12になる。 これをそれぞれ足すと、 111+712+7+1=831 bc -lで計算を確かめると、 pan{c111003}% bc -l [~] 111+712+7+1 831 となり、どちらの計算もあっていたので、16進数での和は、831である。 ー10進数変換ー 次に、16進数の和の答えを10進数に変換して戻した。 16進数を10進数に戻すには、各桁に16の倍数を掛けたものを足す。 この場合、831を8、3、1に分けて右から16の倍数ごと掛けた。 結果は下の通りである。 1*1=1 3*16=48 8*256=2048 1+48+2048=2097 bc -lで計算を確かめると、 pan{c111003}% bc -l [~] 1*1 1 3*16 48 8*256 2048 1+48+2048 2097 となり、どちらの計算もあっていたので、10進数は 2097 である。 <1992・7・1> 19・92・7・1と同様に、計算した。 ー16進数での和ー それぞれ16進数に直すと、 1992→7c8 7→7 1→1 になる。cを10進数に直すと、c→12になる。 これをそれぞれ足すと、 7128+7+1=7136 bc -lで計算を確かめると、 pan{c111003}% bc -l [~] 7128+7+1 7136 となり、どちらの計算もあっていたので、16進数は 7136 である。 ー10進数変換ー 7136を7、1、3、6に分けて右からそれぞれ16の倍数を掛けたものを足した。 6*1=6 3*16=48 1*256=256 7*4096=28672 6+48+256+28672=28982 bc -lで計算を確かめると、 pan{c111003}% bc -l [~] 6*1 6 3*16 48 1*256 256 7*4096 28672 6+48+256+28672 28982 となり、どちらもあっていたので、10進数は 28982 である。 どちらの方も16進数と10進数のを比較してみて、16進数より10進数のほうが大 きいことがわかった。しかし、文字は16進数のほうが多いので大きくなること に疑問を感じた。 C.STDERRは、標準エラーの出力を意味するもので、methodでRubyの言語を実行さ せたいときに、printf文などの実行時にメッセージやエラーメッセージを ktermで表示させたい時に使う。 2.前回のレポートで使用したデータファイル(plan_c1110039.dat)を利用し、 新しくデータファイル(data_c111003.dat)を作った。 レポートの書き方は、「http://roy/~madoka/2012/rpt/egrep.html」を参照した。 A.データの説明 前回と同様に、各携帯会社の新作モデルをプログラムにした。 変更点は、4つ目のWILLCOMの桁から更に8つ追加した。値段は私が予想し たが、携帯会社はネットで調べた。(外国も含む。) B.データファイル docomo パナソニック スマートフォン 60000 au SHARP スマートフォン 65000 SoftBank アップル i-phone 58000 WILLCOM ハニービート スマートフォン 62000 VERTU ノキア スマートフォン 57500 KT サムスン電子 スマートフォン 57000 SoftBank 中興通迅 みまもりケータイ 40000 LGテレコム LG電子 スマートフォン 55000 docomo RIM スマートフォン 70000 イー・アクセス htc スマートフォン 48900 イー・アクセス 華為技術 折り畳みケータイ 38000 docomo モトローラ スライドケータイ 33000 C.分類や目的の説明 左から、携帯会社名、メーカー、商品名、値段の順である。携帯の流行を知り たいと思い、携帯にした。 D.検索パターン つの検索パターンを考えた。 1)egrep "docomo" data_c111003.dat を実行する。予想は、携帯会社名のdocomoが検索される。 2)egrep "SoftBank$" data_c111003.dat を実行する。予想は、SoftBankの後の文字が検索される。 3)egrep "000$" data_c111003.dat を実行する。予想は、000の前の文字が検索される。 4)egerp "ス+マ" data_c111003.dat を実行する。予想は、スマのつく文字だけ検索される。 5)egerp "電*子" data_c111003.dat を実行する。予想は、電子の文字が永遠に検索される。 6)egerp "5.7" data_c111003.dat を実行する。予想は、57がついた数字が検索される。 7)egrep "5.0" data_c111003.dat を実行する。予想は、5と0がつく数字が検索される。 8)egrep "ー?・" data_c111003.dat を実行する。予想は、ーと・がつく文字が検索される。 9)egrep "COM|com" data_c111003.dat を実行する。予想は、COMとcomのつく文字が検索される。 10)egrep "(中)" data_c111003.dat を実行する。予想は、「中」が出てくる文字が検索される。 11)egrep "[み]" data_c111003.dat を実行する。予想は、「み」が出てくる文字が検索される。 12)egrep "[a-z]" data_c111003.dat を実行する。予想は、a〜zに該当するアルファベットが検索される。 13)egrep "[ア-ン]" data_c111003.dat を実行する。予想は、ア〜ンに該当するカタカナが検索される。 14)egrep "[^ア-ン]" data_c111003.dat を実行する。予想は、ア〜ンに該当するカタカナが検索される。 E.実行結果 各結果は下の通りである。 1) pan{ASANUMA Yuka}% egrep "docomo" data_c111003.dat [~/Ruby] docomo パナソニック スマートフォン 60000 docomo RIM スマートフォン 70000 docomo モトローラ スライドケータイ 33000 2) 検索されなかった。 3) pan{ASANUMA Yuka}% egrep "000$" data_c111003.dat [~/Ruby] docomo パナソニック スマートフォン 60000 au SHARP スマートフォン 65000 SoftBank アップル i-phone 58000 WILLCOM ハニービート スマートフォン 62000 KT サムスン電子 スマートフォン 57000 SoftBank 中興通迅 みまもりケータイ 40000 LGテレコム LG電子 スマートフォン 55000 docomo RIM スマートフォン 70000 イー・アクセス 華為技術 折り畳みケータイ 38000 4) pan{c111003}% egrep "ス+マ" data_c111003.dat [~/Ruby] docomo パナソニック スマートフォン 60000 au SHARP スマートフォン 65000 WILLCOM ハニービート スマートフォン 62000 VERTU ノキア スマートフォン 57500 KT サムスン電子 スマートフォン 57000 LGテレコム LG電子 スマートフォン 55000 docomo RIM スマートフォン 70000 イー・アクセス htc スマートフォン 48900 5) pan{c111003}% egrep "電*子" data_c111003.dat [~/Ruby] KT サムスン電子 スマートフォン 57000 LGテレコム LG電子 スマートフォン 55000 6) 検索されなかった。 7) pan{ASANUMA Yuka}% egrep "5.0" data_c111003.dat [~/Ruby] au SHARP スマートフォン 65000 SoftBank アップル i-phone 58000 VERTU ノキア スマートフォン 57500 KT サムスン電子 スマートフォン 57000 LGテレコム LG電子 スマートフォン 55000 8) pan{c111003}% egrep "ー?・" data_c111003.dat [~/Ruby] イー・アクセス htc スマートフォン 48900 イー・アクセス 華為技術 折り畳みケータイ 38000 9) pan{c111003}% egrep "COM|com" data_c111003.dat [~/Ruby] docomo パナソニック スマートフォン 60000 WILLCOM ハニービート スマートフォン 62000 docomo RIM スマートフォン 70000 docomo モトローラ スライドケータイ 33000 10) pan{c111003}% egrep "(中)" data_c111003.dat [~/Ruby] SoftBank 中興通迅 みまもりケータイ 40000 11) pan{c111003}% egrep "[み]" data_c111003.dat [~/Ruby] SoftBank 中興通迅 みまもりケータイ 40000 イー・アクセス 華為技術 折り畳みケータイ 38000 12) 検索されなかった。 13) pan{ASANUMA Yuka}% egrep "[ア-ン]" data_c111003.dat [~/Ruby] docomo パナソニック スマートフォン 60000 au SHARP スマートフォン 65000 SoftBank アップル i-phone 58000 WILLCOM ハニービート スマートフォン 62000 VERTU ノキア スマートフォン 57500 KT サムスン電子 スマートフォン 57000 SoftBank 中興通迅 みまもりケータイ 40000 LGテレコム LG電子 スマートフォン 55000 docomo RIM スマートフォン 70000 イー・アクセス htc スマートフォン 48900 イー・アクセス 華為技術 折り畳みケータイ 38000 docomo モトローラ スライドケータイ 33000 14) pan{ASANUMA Yuka}% egrep "[^ア-ン]" data_c111003.dat [~/Ruby] docomo パナソニック スマートフォン 60000 au SHARP スマートフォン 65000 SoftBank アップル i-phone 58000 WILLCOM ハニービート スマートフォン 62000 VERTU ノキア スマートフォン 57500 KT サムスン電子 スマートフォン 57000 SoftBank 中興通迅 みまもりケータイ 40000 LGテレコム LG電子 スマートフォン 55000 docomo RIM スマートフォン 70000 イー・アクセス htc スマートフォン 48900 イー・アクセス 華為技術 折り畳みケータイ 38000 docomo モトローラ スライドケータイ 33000 F.結果の考察 1)docomoから売られる商品がすべて表示された。予想と違っていた。 普通に文字を打つとその文字にあてはまる事柄がでてくることがわかった。 2)文字が何も検索されなかったので、3)で、別にやった。 3)000の前の文字だけが表示された。予想とあっていた。000がつく事柄が全部で てくることがわかった。 4)ス+マ(スマ)がつく文字全部表示された。予想はあっていたが、スマが付く事 柄の全部が出てきた。 5)電*子(電子)が付く文字全部が表示された。予想はあっていたが、永遠には表 示されなかった。しかし、電子がつく事柄が全部でてきた。 6)何も検索されなかったので、7)で別にやった。 7)5から始まり0で終わる文字の事柄が表示された。予想があっていた。5と0がつ く文字だけが検索されることがわかった。 8)ー・で続く文字が表示された。予想はあっていた。?は続く文字を表示してい ることがわかった。 9)COMもしくはcomがつく文字が表示されることがわかった。予想とあっていた。 「 |」は「もしくは」の意味だということがわかった。 10)中という文字がある文字だけ表示することがわかった。予想とあっていた。 ( )は( )の文字が優先されて検索されることがわかった。 11)10)と同じくみがある文字だけが表示された。予想とあっていた。10)と同じ く[ ]は[ ]の中にある文字だけが表示されることがわかった。 12)検索されなかったので、13)で別にやった。 13)[ - ]は範囲内の文字があるものだけ表示されることがわかった。予想とあっ ていた。範囲内で表示された文字があるところだけ検索されることがわかっ た。 14)13)と同じく範囲内の文字だけ表示された。予想とあっていた。範囲内で表示 された文字があるところだけ検索されることがわかった。 G.利用した正規表現と気付いたこと 3)$(dollar)→語尾の文字列のみ調べる 4)+(plus)→直前の文字が出現される 5)*(asterisk)→出現は何回でも良い 7).(period)→任意の一文字の候補を取り出す 8)?(question mark)→直前の文字が0または1回出現 9)|(vertical lineまたはパイプ)→「または」の意味 10)( )(parenthesis)→( )の中の条件を先に探す 11)[ ](braket)→[ ]の中の文字のどれかが一致するものを取り出す 13)[文字1-文字2](braket)→文字と文字の範囲内の文字を全て取り出す 14)[^文字1-文字2]→文字と文字の範囲外の1文字を取り出す 気付いたことは、範囲を指定しても、その文字列の文字はすべて表示されること がわかった。正規表現の意味をおぼえることで、携帯で検索する時やテレビを録 画するときなどのプログラムに利用できると感じた。 3.感想 私の誕生日が2進数や10進数や16進数であらわすと文字化けするように表示さ れることがわかった。特に、16進数の和を求めるときに、アルファベットを 10進数に直したりして、10進数を求めることができた。10進数に直す時は、2 進数から直す方法と16進数から直す方法など様々なパターンがあることに気付 いた。プログラム問題は、講義でならった正規表現をすべて使ってみたが、聞 くだけの方と実際にやってみる方では、正規表現のやり方も見方が変わった。 まだ、正規表現の意味がよくわかっていないので、しっかり覚えて、プログラ ムの構造を知りたい。気付いたことで述べたように、携帯やパソコンで検索す る時や録画する時などにプログラムが利用できると感じた。 <参考文献> ・「Ruby プログラミング基礎講座」 広瀬雄二 著 第8講 計算機の内部表現 8-1 2進数と16進数 p101〜p106 ・基礎プログラミングI 第3回 「キーボードから入力して計算させるには」 入力した値をプログラムで使おう 西村まどか roy/~madoka/2012/r1/03/r1_03_03_theme_01_gets.html ・基礎プログラミングI 第6回 「正規表現と検索」 西村 まどか うろ覚え検索 http://roy/~madoka/2012/r1/06/r1_06_03_theme_01_patternmatching.html 何回か繰り返されている文字を探したい http://roy/~madoka/2012/r1/06/r1_06_04_theme_02_repetation.html いくつかある候補を探したい場合 http://roy/~madoka/2012/r1/06/r1_06_05_theme_03_or.html 1文字違い http://roy/~madoka/2012/r1/06/r1_06_06_theme_04_onecharacter.html ・ウィキぺディア 「携帯電話」 5月24日閲覧 http://ja.wikipedia.org/wiki/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1 <共同学習者> 佐藤祐子 / 村上茉奈美