第10回 ことおぼえ レポート課題 氏名 鈴木智也 学籍番号 c110129 語学クラス 英語6 コース 地域共創 1、pstoreを使ったCGIの使い方について CGIが動くようにするため、rubycgiの下にpstoreのディレクトリをつくることに する。 pstoreは外部の書き込み専用とすることができる。 pstoreをつくるため、public_htmlをktermで起動させる。 rubycgiを開き、そのディレクトリ内にpstoreをmkdirで作成する。 そこで、自由に書くためのpstoreを作ることにする。 なお、CGIスクリプトは値を引渡し処理を行うまでしか、その数値は反映されな いから、使い勝手があまり良くないと感じる。 そこでファイルに内容を取りこんだ、変数をそのままのかたちでファイルに保存 できるのが、pstoreである。 !/usr/koeki/bin/rubyはhtml文書で書いたディレクトリをRubyで取りこむ require "pstore" cgi = CGI.new(html4) db =PStore.new("./pstore/sales.db") db=PStore.transaction do requireはプログラムで外部と連絡をする際に用いる記述方法である。 dbはファイルにアクセスするためのpstore変数とした。PStore.newは変数をhash値として取り出すため使った。 ("./pstore/sales.db")はsales.dbファイルを作り、それにアクセスするためdb というpstore変数を置くことにした。 PStore.transaction doはデータファイルと出力した値のやりとりをする。 ただしファイルは PStore.transaction doの中でだけ使用することができる。 この下の3行は決まったかたちとして扱う。 db.transaction do if db == nil db[t] = Hash.new if db ==nilのところは、データベース内にpstore変数のdbが存在しないのであ れば、hash値を空っぽにしてからつくるという作業にするということ行う。 db[t] = station db[t] = cgi["sales"] end 今回作成したsales.rbは変数dbをkeyとよばれるsalesに対応するかたちでdbの [t]に代入される。 最後にデータベースへの値の書き込みは最後のendを使うことで、入力が終わっ たら、その時点でtransaction処理が終了することを表している。 2、プログラム課題 A-1、リンク先 http://roy/~c110129/advertise2/rubycgi/r2_cgi_best.html 広告ページhttp://roy.e.koeki-u.ac.jp/~c110129/advertise2/ A-2 CGIの題材と目的 洋服の試着がどのようにプログラムではおこなわれているかと、実際の公益的 な視点から、shopの店員になったつもりで製作しようと考えた。 A-3 プログラム本体 #!/usr/koeki/bin/ruby require'cgi' cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-jp\n\n") name1 =cgi["name"] size =cgi["size"] iro =cgi["color"] print("\n") number = 0 open("number.txt","r")do |read| while data = read.gets if /(\d+)/ =~ data number = $1.to_i end end end print("\n") printf("

NO. %d のお客さま

\n",number) print("さてどんな感じでしたか?\n") print("

試着のお時間となりました

\n") print("

◯◯さんにはぴったりだったでしょうか

\n") print("\n") print("

") if size == "S" print("

とっても小さいね、めだってるわ!

\n") print("

\n") elsif size == "M" print("

良くお似合いですね,素敵だと思いますよ!!

\n") elsif size == "L" print("

少し大きいかんじですね,もう少し小さいほうがいいと思いますよ!

\n") else size =="XL" print("

凄く大きいですね!!,もう少し小さいのを持ってきますか?

\n") end print("

誠にありがとうございました

") print("

") print("\n") print("\n") number += 1 open("number.txt","w") do |write| write.printf("%d\n",number) end A-4 プログラムの各部分の説明 #!/usr/bin/env rubyはhtml文書で書いたディレクトリをRubyで取りこむ requireはプログラムで必要な外部との連絡をする際に用いる記述方法である。 CGI.newは変数をhash値として取り出す。 print("Content-print("Content-type: text/html; charset=EUC-JP\n\n") type: text/html; charset=EUC-JP\n\n")が日本語コードで入力を可能にするた め用いた。 今回のプログラムはcgi変数を洋服になぞってsizeとname1で表示させることにし た。 openメソッドで指定したファイルを開く。open("number.txt","r")を開かせてい る。 ファイルは書き込む時モードを変数で代入しておく。number.txtの後に"r"の ようにする。ファイルの変数名で文字を代入する。 while data= read.getsでファイルの読み取りを行っている。 if文でもし〜ならという意味を含ませた。 /d+は0〜9の数字を1回以上繰り返したものが選ばれる。 つまり数字と思われるものを選択させる。 /正規表現/ =~ 文字列 =~は正規表現にマッチするという比較演算子である。 $1は前段の/(\d+)のカッコ内の定められた部分を後で取り出すことが出来る これを後方参照というものである。 正規表現で記述した際の()の順番に応じて数字をあとから取り出すことがで きる。数字の値は文字列でできる print部分では、ifを使った条件判断を利用した。 今回の条件部分は条件が複数存在するため、elsifを使った。 elsifは条件複数で使われる。 number += 1は後方参照で取り出した数字にプラス1足した数を他のWebで表示さ せている。 openメソッドで指定したファイルをひらいている。。 後の"w"はファイルの変数名と指定し、実行し、writeでwebに書かせる %dは変数numberの値を書かせる。 A-5 プログラム実行結果 ◯(Sサイズの場合) NO. 6 のお客さま 試着のお時間となりました ◯◯さんにはぴったりだったでしょうか とっても小さいね、めだってるわ! 誠にありがとうございました ◯(Mサイズの場合) NO. 7 のお客さま 試着のお時間となりました ◯◯さんにはぴったりだったでしょうか 良くお似合いですね,素敵だと思いますよ!! 誠にありがとうございました ◯(Lサイズの場合) NO. 8 のお客さま 試着のお時間となりました ◯◯さんにはぴったりだったでしょうか 少し大きいかんじですね,もう少し小さいほうがいいと思いますよ! 誠にありがとうございました ◯(XLサイズの場合) NO. 9 のお客さま 試着のお時間となりました ◯◯さんにはぴったりだったでしょうか 凄く大きいですね!!,もう少し小さいのを持ってきますか? 誠にありがとうございました 4,感想 今回の課題を通して、tgifを実際のアニメーションで動かすということが難しい ことが分かりました。Rubyに貼ってもなかなか機能せず、とても悩みましたが、 Tgifの作業を出来る限り早く行えることがこれからの課題だというふうに感じた。 授業で教えてもらったメニューパネルの線の種類を選択すると、freeで書くより ずっとやりやすく便利だと感じた。さらに良い作品をつくろうと感じた。 興味を持った作品はc106034のプレゼント作品でした。tgifを単に表示させるだけで なくマウスで動かすと箱からモノがででくるというしくみを作ったところはとて も凄いと思いました。私も挑戦はしてみたもののなかなか上手くいきませんでし た。でも、なんとかして実行できるようになりたいと思いました。 5、参考文献 西村まどか 基礎プログラミングII 第10回 「ことおぼえ」 http://roy/~madoka/2010/r2/10/ 神田直弥 基礎プログラミングII 第5回 「再帰」 http://roy/~naoya/rubyII/8.html 広瀬雄二 基礎プログラミングII 後期第9回 http://roy/~yuuji/2011/pf2/09/index.html