5 月 30 日のレポートについて XXXX語 XXXX系 c106XXXX XXXXXXXX 【1】 ■A■ 0b100101 = 0x?? 右側から4桁区切って、第4回授業の「16進数のまとめ」を参考にする。 0b100101 = 0x25 ■B■ 0d1111 = 0x?? 2 ) 1111 →余り 1 ------- 2 ) 555 →余り 1 ------- 2 ) 277 →余り 1 ------- 2 ) 138 →余り 0 ------- 2 ) 69 →余り 1 ------- 2 ) 34 →余り 0 ------- 2 ) 17 →余り 1 ------- 2 ) 8 →余り 0 ------- 2 ) 4 →余り 0 ------- 2 ) 2 →余り 0 ------- 1 よって、0d1111 = 0b10001010111 また、(A) と同じように右側から4桁区切って、第4回授業の「16進数のまとめ」を参考にする。 よって、0d1111 = 0x457 【2】 ■A■ data06.dat を使用しました。 『1』「指」の前の文字が曖昧な時の検索パターン。 answer1.rb 〈予想〉 「親指さがし」が検索されるはずである。 〈プログラム〉 #!/usr/koeki/bin/ruby while data06 = gets # data06 というファイルからデータを取って来る if /親?指/ =~ data06 # data06 の中から「指」の直前の文字が曖昧な時 print data06 # data06 の検索結果を表示する end # if - end end # while -end 〈実行結果〉 irsv{c106122}% ./answer1.rb data06.dat [~/Ruby] 親指さがし 三宅健 日本 2007 おやゆびさがし 〈考察〉 /文字1 ? 文字2/で、「?」の前の文字があるかどうか分からないというなので、 この文字1や文字2が含まれているものは必ず表示される。 〈気付いたこと〉 最初の文字が分からない時に便利な探し方だと思う。 『2』文字列の中に4〜6の数字が含まれるものを探す検索パターン。 answer2.rb 〈予想〉 全ての文字列に数字が含まれているが、[4-6]と指定しているので、2004、2005、2006 年に発売されたものが検索されるはずである。 〈プログラム〉 #!/usr/koeki/bin/ruby while data06 = gets # data06 というファイルからデータを取って来る if /[4-6]/ =~ data06 # data06 の中から4、5、6の数字が入っているものを探す print data06 # data06 の検索結果を表示する end # if - end end # while -end 〈実行結果〉 irsv{c106122}% ./answer2.rb data06.dat [~/Ruby] 銀のエンゼル 小日向文世 日本 2005 ぎんのえんぜる river 大泉洋 日本 2004 りばー タナカヒロシのすべて 鳥肌実 日本 2005 たなかひろしのすべて タイヨウのうた YUI 日本 2006 たいようのうた さよならみどりちゃん 星野真理 日本 2006 さよならみどりちゃん 真夜中の弥次さん喜多さん 長瀬智也、中村七之助 日本 2005 まよなかのやじさんきたさん ラブコン 藤沢恵麻、小池徹平 日本 2006 らぶこん 姑獲鳥の夏 堤真一 日本 2005 うぶめのなつ 〈考察〉 最初 /[0-7]/ としていたので、データの全てが表示されてしまった。 "[ ]" は、[ ] で括られた文字の何れかが一致するものを取り出すことであり、 その中に 4-6 と指定してあるので、4 か 5 か 6 を含んでいるものは全て検 索される。 〈気付いたこと〉 探し出すものの条件を指定していなければ、全て検索されてしまう。 『3』最初の文字がひらがなの時の検索パターン。 answer3.rb 〈予想〉 ひらがなで始まるのは1つだけしかないので「さよならみどりちゃん」が検索 されるはずである。 〈プログラム〉 #!/usr/koeki/bin/ruby while data06 = gets # data06 というファイルからデータを取って来る if /^[ぁ-ん]/ =~ data06 # data06 の中からひらがなから始まるものを探す print data06 # data06 の検索結果を表示する end # if - end end # while -end 〈実行結果〉 irsv{c106122}% ./answer3.rb data06.dat [~/Ruby] さよならみどりちゃん 星野真理 日本 2006 さよならみどりちゃん 〈考察〉 [ぁ-ん]は、ひらがなが文字列の中に1文字でも含まれていれば表示される。そ れに「^」を加えることによって、最初の1文字目がひらがなで始まるものを探 せ、となる。 〈気付いたこと〉 最初、/[ぁ-ん]/ で検索するプログラムを作成したのだが、結局全ての文字列 にひらがなが含まれているので全て検索されてしまった。 また、/^[ァ-ン]/の検索プログラムを作ってみたが、なぜか起動しなかった。間違いを 示す文も表示されなかったので、何が違うのか分からずこの検索パターンは断念した。 『4』最後の文字が「ん」で終わる時の検索パターン。 answer4.rb 〈予想〉 「さよならみどりちゃん」、「真夜中の弥次さん喜多さん」、「ラブコン」が検 索されるはずである。 〈プログラム〉 #!/usr/koeki/bin/ruby while data06 = gets # data06 というファイルからデータを取って来る if /ん$/ =~ data06 # data06 の中から最後の文字が「ん」で終わる print data06 # data06 の検索結果を表示する end # if - end end # while -end 〈実行結果〉 irsv{c106122}% ./answer4.rb data06.dat [~/Ruby] さよならみどりちゃん 星野真理 日本 2006 さよならみどりちゃん 真夜中の弥次さん喜多さん 長瀬智也、中村七之助 日本 2005 まよなかのやじさんきたさん ラブコン 藤沢恵麻、小池徹平 日本 2006 らぶこん 〈考察〉 末尾は全てひらがななので、ひらがなで検索する。 〈気付いたこと〉 題名で探そうとして、カタカナや漢字の検索プログラムを作ったら、探し出せ なかった。これは、末尾で探し出す方法なので、ひらがなだけでしか検索できない。 『5』読み方だけで検索したい時の検索パターン。 answer5.rb 〈予想〉 この検索パターンなら、「姑獲鳥の夏」しか出てこないはずである。 〈プログラム〉 #!/usr/koeki/bin/ruby while data06 = gets # data06 というファイルからデータを取って来る if /うぶめのなつ/ =~ data06 # data06 の中から読み方だけ分かっている時 print data06 # data06 の検索結果を表示する end # if - end end # while -end 〈実行結果〉 irsv{c106122}% ./answer5.rb data06.dat [~/Ruby] 姑獲鳥の夏 堤真一 日本 2005 うぶめのなつ 〈考察〉 難しい漢字のものを探す時は便利な検索方法である。 〈気付いたこと〉 この検索パターンだと、1つしか表示されない。 『6』文字列の中に小文字英語が含まれている時の検索パターン。 answer6.rb 〈予想〉 英語が含まれているのは「river」「DEATH NOTE デスノート The Last name」「頭文字D」が検索されるが、『小文字英語』 と指定したので、「river」と 「DEATH NOTE デスノート The Lastname」が検索されるはずである。 〈プログラム〉 #!/usr/koeki/bin/ruby while data06 = gets # data06 というファイルからデータを取って来る if /[a-z]/ =~ data06 # data06 の中から小文字英語が含まれているものを探す print data06 # data06 の検索結果を表示する end # if - end end # while -end 〈実行結果〉 irsv{c106122}% ./answer6.rb data06.dat [~/Ruby] river 大泉洋 日本 2004 りばー DEATH NOTE デスノート The Last name 藤原竜也 日本 2007 ですのーと/ざらすとねーむ 〈考察〉 "[ ]"は、 [ ]で括られた文字のどれかが一致するものを取りだす。だから /[a-z]/は小文字英語が含まれている文字列は全て探し出される。 〈気付いたこと〉 /^[a-z]/とすると、先頭の文字列が小文字英語から始まるものが探し出される が、この検索パターンは、(3)の検索パターンと同じ方法である。 〈参考文献〉 『1』〜『6』まで全てのファイルについて、第7回授業「日本語を検索するには」 の egrep_jp.rb というファイルを元にした。 ■E■ 起動時にデータを読み込まずして検索できるよう改良したプログラム。 〈プログラム〉 #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " pattern = STDIN.gets.chomp #STDIN は、処理の方法をキーボードからの入力によって操作する時に使う request = Regexp.new(pattern, true, "e") #正規表現したい文字列に true というオプションをつける open("data06.dat","r") do |cinema| #データを開く # "r"はモードを意味する while data06 = cinema.gets #data06 からデータを取ってくる if request =~ data06 #data06に合ったデータを探す # print data06 if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ data06 printf("%sビデオ・DVD\n", $1) #ビデオ・DVDと表示する end #if -end end #if - end end #while - end end #open - end 〈変更点〉 変数 candidate を cinema にした。 私のファイルは5列あるので、\s+(\S+) を1つ増やした。 〈実行結果〉3つのせる irsv{c106122}% ./input_b.rb data06.dat [~/Ruby] 検索パターン : レッド レッドドラゴンビデオ・DVD irsv{c106122}% ./input_b.rb data06.dat [~/Ruby] 検索パターン : さ 親指さがしビデオ・DVD さよならみどりちゃんビデオ・DVD 真夜中の弥次さん喜多さんビデオ・DVD 木更津キャッツアイ/ワールドシリーズビデオ・DVD irsv{c106122}% ./input_b.rb data06.dat [~/Ruby] 検索パターン : D DEATHビデオ・DVD 頭文字Dビデオ・DVD 〈考察〉 「デスノート」は「 DEATH NOTE 」と、DEATH と NOTE の間にスペースをいれて いるので、このプログラムでの表示は「DEATH」だけとなっている。 〈参考文献〉 第7回授業の「データを読み込むようにするには」の readdata.rb というファイ ル。 【3】 全部頑張った。その中で特に頑張ったのは、■A■ のanswer1.rb、 answer2.rb、 answer3.rb、 answer4.rb、answer5.rb、 answer6.rb で、作動しなかったも のがなぜ動かないかなどを考えたり、別な方法を試してみたりしたことだ。ファ イルを6つ作ったので、その回数は多く感じられた。■E■は最初作動しなかっ たので、表示されていたファイルをコピーし、変更するところだけ変更したら、 作動した。「^」や「$」や「[ ]」、「?」の使い方さえ分かってしまえば1人 でプログラムを複数作ることができた。