出力方法-演習編

Problem3: 現在時刻を大きな字で表示してみよう

アクセスした時点での時刻を表示する CGI を作成してください。文字を大きく表示するためには、html ファイルとして表示させる必要があります。

⇒ ヒント

Hint

⇒ 答え

Solution

ヒントにあった html をそのまま使ってしまいましょう。最も簡単な答えとしては、

#!/usr/local/bin/ruby
print <<EOS
Content-Disposition: filename="now.html"
Content-Type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html>
  <meta http-equiv="Content-Style-Type" content="text/css" >
  <style type="text/css">
  <!--
    body{background-color:navy;}
    p{font-size:3em;font-weight:bold;color:lime;text-align:center;margin:1em;}
  -->
  </style>
  <link rev="made" href="mailto:nobody@dummy.test">
  <link rel="start" href="/" title="Root">
  <title>What time is it now?</title>
</head>
<body>
<p>#{ Time.now }</p>
</body>
</html>
EOS

Time.now のままだと読みづらいので、文章として読みやすくしてみます。日本語で、文字コードは Shift_JIS として、

#!/usr/local/bin/ruby -Ks
t = Time.now
print <<EOS
Content-Disposition: filename="now.html"
Content-Type: text/html;charset=Shift_JIS

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
  <meta http-equiv="Content-Style-Type" content="text/css" >
  <style type="text/css">
  <!--
    body{background-color:navy;}
    p{font-size:3em;font-weight:bold;color:lime;text-align:center;margin:1em;}
  -->
  </style>
  <link rev="made" href="mailto:nobody@dummy.test">
  <link rel="start" href="/" title="Root">
  <title>現在時刻</title>
</head>
<body>
<p>ただいまの時刻は#{ t.hour }時#{ t.min }分#{ t.sec }秒です。</p>
</body>
</html>
EOS

上記のやり方だと、html の編集がとてもやりづらいものとなってしまいます。 制作に当たり、「プログラムからコピー⇒htmlに貼付けて編集⇒htmlからコピー⇒プログラムにはりつけ」 というプロセスの繰り返しは、とても煩わしいです。 デザインの専門家との分業も難しくなります。 そこで、html ファイルと、プログラムファイルを別々に編集するのが効率の良いやり方でしょう。 html ファイルの中に特別な合い言葉を埋め込んでおいて、プログラムではその合い言葉を必要な文章に置き換えます。例えば…

html ファイル:ファイル名 temp.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
  <meta http-equiv="Content-Style-Type" content="text/css" >
  <style type="text/css">
  <!--
    body{background-color:navy;}
    p{font-size:3em;font-weight:bold;color:lime;text-align:center;margin:1em;}
  -->
  </style>
  <link rev="made" href="mailto:nobody@dummy.test">
  <link rel="start" href="/" title="Root">
  <title>現在時刻</title>
</head>
<body>
<p>ただいまの時刻は●時●分●秒です。</p>
</body>
</html>

プログラム:temp.html と同じディレクトリ内で

#!/usr/local/bin/ruby -Ks
t = Time.now
h = "%02d" % t.hour            # 時
m = "%02d" % t.min             # 分
s = "%02d" % t.sec             # 秒
f = File.open("temp.html","r")
html = f.read
f.close
print <<EOS
Content-Disposition: filename="now.html"
Content-Type: text/html;charset=Shift_JIS

EOS
print html.sub(/●/,h).sub(/●/,m).sub(/●/,s)
#!/usr/local/bin/ruby -Ks
f = File.open("temp.html","r")
html = f.read
f.close
t = Time.now
html.sub!( /●/ , "%02d" % t.hour )
html.sub!( /●/ , "%02d" % t.min  )
html.sub!( /●/ , "%02d" % t.sec  )
print <<EOS
Content-Disposition: filename="now.html"
Content-Type: text/html;charset=Shift_JIS
Content-Length: #{ html.length }

EOS
print html

参考:時刻の表し方

⇒ 次の問題に進む

以上です。

Last updated 04.Sep.2006 [ Home ] [ Up ] [ 質問メール ]
Copyright © 2005-2006 Shigeru Konno All Rights Reserved..