第10回のレポート課題です。 氏名: 時田佳穂 学籍番号: C1101603 語学クラス: 中国語3 コース(系): 環境サイエンス 1- A. PStoreとは、Rubyのオブジェクトを外部ファイルに格納するための クラスである。 データをプレーンテキストの形式で書き込むopen-endとは異なる ファイル入出力方法である。 訪問者によって入力されたデータを保存するためには、 計算機に第三者も書き込めることを宣言することになるが、 ディレクトリを全て書き込み可能にすると第三者が勝手に データを書き換えることができてしまう。 そこで、CGIが動くディレクトリの中にデータベース専用の ディレクトリを作り、その中だけ第三者書き込み可能の宣言をすればよい。 PStoreをCGIに利用すると、アンケートなどで入力された結果を 全て保存しておくことができ、openメソッドのようにデータベース のファイルのオープン・クローズを毎回意識しなくてもよい。 具体的には以下のように書く。 require"pstore" PStore変数 = PStore.new("データベースファイル名") PStore変数.transaction do データベースへのアクセス(格納/取り出し) end ◎require"pstore" PStoreはCGIと同じように標準では使用できないため、 これでPStoreの機能を追加する。 ◎PStore変数 = PStore.new("データベースファイル名") PStore変数内の値を保存するデータベースファイルの作成。 PStore変数はデータベースへアクセスする際に使用する。 ◎PStore変数.transaction do - end データベースファイルとの値のやりとり。 ファイルとのやりとりはこの中だけで行うことができる。 データベースへの書き込みはendに到達した時点で行われる。 2- ブログ風のホームページを作りました。 ◯r2_cgi_best.html ブログ風なページ ↑左側25%のフレームをつくる。境界線はなし ↑左右それぞれの中味となるhtmlファイルを指定。 ◯prof.html キャラ ↑gifアニメを作りました。
名前: ときた
性別:
語学: 中国語
コース: 環境
好き: 動物
嫌い: セミ
うまい: 食べ物
まずい: トマト
↑簡単にプロフィール
c110160@f.koeki-u.ac.jp
◯report.html

ブログっぽ

※公益大SNSで書いている日記を一部改変して掲載しています。

↑formでmonth.rbを呼び出し ここでは、月ごとに記事を呼び出す。

月表示

↑formでcategory.rbを呼び出し ここでは、カテゴリごとに記事を呼び出す。

カテゴリ表示

c110160@f.koeki-u.ac.jp
◯month.rb #!/usr/bin/env ruby $KCODE = 'e' require 'cgi' #CGIの機能を呼び出し cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-JP\n\n") tsuki = cgi["month"] #htmlで入力された値を代入 n = 0 m = [] d = [] c = [] t = [] h = [] open("diary.txt","r")do |i| while line = i.gets if /(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)/ =~ line m[n] = $1.to_i #月 d[n] = $2.to_i #日 c[n] = $3 #カテゴリ t[n] = $4 #タイトル h[n] = $5 #本文 n += 1 end end end #記事のデータが入ったtxtファイルを読みこみ、 #5つに分けてそれぞれの配列変数に入れる。 #p m #p d #p c #p t #p h print"\n" print"\n" print"日記\n" print"\n" # ticket.cssを読み込む #このとき、print"" 以外の " は混同を避けるために # \" としなければならない。 print"\n" print"\n" print"\n" #p tsuki if tsuki == "9月" n = 0 while true print"\n" printf("\n",m[n],d[n],c[n]) printf("\n",t[n]) printf("\n",h[n]) print"
%d月 %d日 [ %s ]
%s
%s
\n" n += 1 if n == 2 break end end elsif tsuki == "10月" n = 2 while true print"\n" printf("\n",m[n],d[n],c[n]) printf("\n",t[n]) printf("\n",h[n]) print"
%d月 %d日 [ %s ]
%s
%s
\n" n += 1 if n == 9 break end end elsif tsuki == "11月" n = 9 while true print"\n" printf("\n",m[n],d[n],c[n]) printf("\n",t[n]) printf("\n",h[n]) print"
%d月 %d日 [ %s ]
%s
%s
\n" n += 1 if n == 16 break end end elsif tsuki == "12月" n = 16 while true print"\n" printf("\n",m[n],d[n],c[n]) printf("\n",t[n]) printf("\n",h[n]) print"
%d月 %d日 [ %s ]
%s
%s
\n" n += 1 if n == 17 break end end end #選択ごとに処理を書く。 print"\n" print"\n" ◯category.rb #!/usr/bin/env ruby $KCODE = 'e' require 'cgi' #CGIの機能を呼び出し cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-JP\n\n") syu = cgi["category"] #htmlで入力された値を代入 n = 0 m = [] d = [] c = [] t = [] h = [] open("diary2.txt","r")do |i| while line = i.gets if /(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)/ =~ line m[n] = $1.to_i #月 d[n] = $2.to_i #日 c[n] = $3 #カテゴリ t[n] = $4 #タイトル h[n] = $5 #本文 n += 1 end end end #記事のデータが入ったtxtファイルを読みこみ、 #5つに分けてそれぞれの配列変数に入れる。 #p m #p d #p c #p t #p h print"\n" print"\n" print"日記\n" print"\n" # ticket.cssを読み込む #このとき、print"" 以外の " は混同を避けるために # \" としなければならない。 print"\n" print"\n" print"\n" #p syu if syu == "大学" n = 0 while true print"\n" printf("\n",m[n],d[n],c[n]) printf("\n",t[n]) printf("\n",h[n]) print"
%d月 %d日 [ %s ]
%s
%s
\n" n += 1 if n == 4 break end end elsif syu == "サークル" n = 4 while true print"\n" printf("\n",m[n],d[n],c[n]) printf("\n",t[n]) printf("\n",h[n]) print"
%d月 %d日 [ %s ]
%s
%s
\n" n += 1 if n == 7 break end end elsif syu == "私的" n = 7 while true print"\n" printf("\n",m[n],d[n],c[n]) printf("\n",t[n]) printf("\n",h[n]) print"
%d月 %d日 [ %s ]
%s
%s
\n" n += 1 if n == 9 break end end elsif syu == "小言" n = 9 while true print"\n" printf("\n",m[n],d[n],c[n]) printf("\n",t[n]) printf("\n",h[n]) print"
%d月 %d日 [ %s ]
%s
%s
\n" n += 1 if n == 18 break end end end #選択ごとに処理を書く。 print"\n" print"\n" ◯pro.css(profile.htmlのcss) body{ margin-top:2em; #上部に空白を2em background-image: url(prof.png); #背景画像 } table{ margin-left: 2ex; #左marginを2exあける } tr{ text-align: left; #tr内のテキストを左寄せ } ◯re.css(profile.html以外のcss) body{ margin-left: 0; #左marginを0 } table{ border-style: inset; #borderをへこんだように見えるinsetにする margin: 1em; #上下左右のmarginを1em } ◯考察 記事の順番の都合で、txtファイルを2つ作ることになった。 また、これだと更新があっても逐一反映していかなければ ならないので、その辺りはまだどうにかなりそうだと思う。 3- 私が興味のある作品は 多田友香先輩のCGI自由課題です。 http://roy/~c108148/advertise2/rubycgi/r2_cgi_best.html シチュエーションによって違った絵が出てきて 何回もやりたくなります。 4- ◯参考URL 基礎プログラミングII 第10回「ことおぼえ」 西村まどか http://roy/~madoka/2011/r2/10/ 基礎プログラミングII 第10回 神田直弥 http://roy/~naoya/cgi-bin/10.html HTML講座(フレーム) 上綱秀治 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/html/hp7.html ◯共同学習者 佐藤千香