カテゴリー
Python

日付や時間のデータを取得する方法

この章では日付や時間のデータを取得する方法について説明します。
日付や時間を取得するにはdatetimeモジュールを使用しますので、プログラムの冒頭に9と記述してください。
datetimeモジュールは時間や日付に関するメソッドなどが入っているファイルです。
では例をみてみましょう。9 時間を取得するにはtimeクラスを使用します。99が代入されているaを9で出力すると9となります。
「時」「分」などの個別の要素を取得には以下の構文で記述します。99 結果は次の通りです。9
次は日付を取得する方法について説明します9 日付を取得するにはdateクラスを使用します。9

9 が入っているaを9で出力すると9となります。
「年」「月」などの個別の要素を取得には以下の構文で記述します。99 結果は次の通りです。9
次はdateクラスで今日の日付を取得します。9 今日の日付を求めるには9という構文で書きます。
例えばこれを9で出力すると9という形式で出力されます。
9結果は以下の通りです。9
次は日付と時間を両方取得する方法について説明します。99 日付と時間を取得するにはdatetimeクラスを使用します。9

9 が入っているaを9で出力すると9となります。
個別にそれぞれの要素を取り出す方法はdateクラス,timeクラスと同じなので参考にしてください。
結果は以下の通りです。9
次はdatetimeクラスで今日の日付や時間を取得する方法について説明します。99 今日の日付を求めるには 9 と言う形式で書きます。
個別にそれぞれの要素を取り出す方法はdateクラス,timeクラスと同じなので参考にしてください。
結果は以下の通りです。9
次の例は今日の日付や時間を元に「今日から何日後の日付や時間」「今日から何日前の日付や時間」を取得する方法です。9 今日の日付と時間を取得するには9と書くことは説明しましたが、「今日から何日後の日付や時間」「今日から何日前の日付や時間」を取得したい場合は9という構文で書きます。
例えば1日後の日付や時間を得たいのであれば9と書き、1日前の日付や時間を得たいのであれば9と書きます。9 結果は次の通りです。9

カテゴリー
Ruby

Timeクラスについて知ろう

この章ではTimeクラスについて説明します。
Timeクラスは文字通り、時刻を表現するクラスです。9 では例をみてみましょう。9 このTimeクラスのオブジェクトのtimeには現在の時刻が格納されていますので、9のように現在の時刻が出力されます。
上の例は以下のように書いても同じ結果を得られます。9
次は個別に年,日などを取得する方法について説明します。999 999999本日の曜日を文字で得たい場合には曜日の配列を作成して、その配列の添え字に9の結果を入れます。
999

次は時刻に対しての計算方法について説明します。
タイムオブジェクトは足し算や引き算などを行うことが出来ます。
では例をみてみましょう。9 =>現在の日時から5時間分を引いた例です(足す場合には「+」を使用します)。
タイムオブジェクトから指定した秒数を「-」で引きます。
9は5時間になります。
結果は以下の通りです。9
次は時刻をフォーマット通りの文字列にする方法について説明します。
基本構文は以下の通りです。99 999では例をみてみましょう。9 => strftimeのカッコの中はダブルクォートかシングルクォートで全体を囲んで、例のように日本語とフォーマット文字列を混ぜ込んで書きます。
フォーマット文字列の間はカンマで区切る必要はありません。
結果は以下の通りです。9
次はタイムオブジェクトをto_sメソッドで出力する方法について説明します。
では例をみてみましょう。9 9=> puts timeは9を使って9と書くこともできます。
結果はどちらも現在の時間の9です。
結果は次の通りです。9
次はタイムオブジェクトを9で表示させた例を説明します。
タイムオブジェクトは1970年1月1日午前0時から何秒経ったかの情報を持っているので、それを表示するのが9です。
これらの違いを例で説明します。
では例をみてみましょう。9 to_fは1970年1月1日午前0時からの経過秒を浮動小数点数で表しています。
to_iやtv_secは1970年1月1日午前0時からの経過秒を整数で表しています。9
次は経過秒からタイムオブジェクトを作成するatメソッドについて説明します。
では例をみてみましょう。99 この結果はローカルタイム(現地の時刻)で出力していますが、これを世界協定時(UTC)に変更することも出来ますので、次の例を見てみましょう。
世界協定時とは世界で標準に使われている時刻です。9 このようにタイムオブジェクトに「UTC」を付けることで、世界協定時を取得できます。
結果はローカルタイムが9です。
世界協定時が9です。ですので、9時間の時差があります。

次は文字列で書かれた時刻の情報を9のような形式に変換するparseメソッドについて説明します。
このparseメソッドを使用するには冒頭に9を挿入することが必要です。
では例をみてみましょう。9 9のような時刻文字列を以下のような表示に変換します。
英字やH12のような文字列も使用できます。9

カテゴリー
C言語

switch文で占いを判定しよう

この章ではswitch文で占いを作成します。占いは毎回同じ判定ではなく、結果はランダムになるようにします。1111 初めにランダムな数をransuuに入れるのですが、このランダムな数を生成するにはrand関数を使用します。
rand関数を使うためには文頭で1と書かなくてはいけませんので注意してください。
rand関数は0か32767までの数字の中でランダムな数を返しますが、範囲を限定したい場合には例えば1と書きますと1から6までのランダムな数を返すようになります。
0から6までの数値をランダムに返したいのならば1と書きます。
しかし、このrand関数だけではプログラムを何回実行しても同じ結果にしかなりません。理由は乱数を初期化していないからです。
この乱数を初期化するにはsrand関数を使います。1 ではsrand関数の説明をしていきます。
〇「unsigned」は「符号無し整数」で「0を含むプラスの値」が使用できる型です。
〇この関数を使う時には1を記述する必要があります。
〇srand関数はrand関数を使用する時に一緒に使用します。
〇srand関数は乱数の初期値を設定する関数です。
つまり、乱数に使う初期値を変える関数です。
例えば1と書くと初期値が1、1とすると初期値が2の乱数を導き出すことが出来ます。1 初めに1を入れないで、rand関数を実行してみましょう。1 この例の実行結果は以下の通りです。1 ではもう一度実行してみましょう。
結果は以下の通りですが、1回目の結果と同じです。
rand関数はランダムに数値を導き出してくれますが、乱数になるのは初めの1回だけです。1 そこで乱数の初期値を設定する関数であるsrand関数で実行結果を変えることが出来ます。
次の例は先ほどの例に1を追加しただけです。1 結果は何度実行しても以下の通りです。1 初期値を変えたので乱数の値は変わりましたが、この例のようにsrandの中の引数を固定した場合はいつまで経っても同じ値になります。
そこでsrand関数の引数に1を使用します。
この中のtimeはtime関数で、1970年1月1日0時0分0秒からの経過時間を返します。
ですのでtime関数をsrandの引数に使うことで、その瞬間の時刻が引数に入りますので実行の都度違う数値を与えることができます。
time関数を使う時には1を記述する必要があります。1 これで毎回違う結果を出力することが出来ます。11 では占いの例に戻ります。1 ransuuに入った数字で大吉から大凶までをランダムに占い、その結果をポインタのunseiに入れて出力しています。

カテゴリー
PHP

クッキーについて知ろう

この章ではクッキーについて説明します。
ブラウザとサーバ間のやり取りにおいて、入力内容やユーザーの情報、アクセスした回数などをユーザーのパソコン内部のハードディスクに保存する仕組みをクッキーといいます。
つまり、サーバからのデータをパソコンに保存するしくみです。
通信というのはページを移動するたびに1回接続を切断してから、また接続し直すという行為を繰り返すので、ページ間でデータの引継ぎはできません。
しかし、クッキーと言う仕組みを使うことでデータをパソコン内部に保存することが出来ますので、ページ間の受け渡しが可能になります。
皆さんはショッピングサイトでお買い物をしたことがあると思いますが、1回目は名前などの個人情報を入力しますが2回目アクセスしたときには改めて名前などを入力しなくても、すでに入力されている状態になっているという経験をしたことがあると思いますが、これはクッキーという機能を利用しているのです。
以下の図で詳しく説明します。1 初めてサイトなどにアクセスしたときは以下の順序で進みます。
①ブラウザからサーバへリクエストします。
②次にサーバでクッキーを発行してブラウザ側にレスポンスします。
setcookieでブラウザにクッキーをセットします。setcookieについては後ほど説明します。
③ブラウザはサーバからのクッキー情報を記録します。
初めてのアクセス時にはまだクッキーはブラウザからサーバに送られません。
2回目のアクセス時にはクッキーがすでにセットされているのでサーバに送られます。
次は2回目の訪問した時について説明します。
①今度は上記3で保存したクッキーをサーバに送ります。
②サーバはこのクッキーを参照してクッキーの値を取得します。
ブラウザから送信されたクッキー情報は1で取得できます。
$_COOKIEについては後ほど説明します。
③クッキーに応じて情報やデータを表示する。
では例を見てみましょう。
以下のファイル名は1です。1111112015-05-06_18105411下のファイル名は1です。2015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_181054
Lesson29.phpで名前とメールアドレスなどを入力フォームから2015-05-06_181054に送ります。
初めてLesson29.phpにアクセスした場合には以下の画面が表示されます。2015-05-06_181054 このフォームに名前などを入力して2015-05-06_181054をクリックしますと2015-05-06_181054にデータが送られます。
結果は以下のように表示されます。2015-05-06_181054
次にこの状態からブラウザの戻るボタンで2015-05-06_181054に戻ってください。
この後にブラウザの更新ボタンをクリックしてください。
クッキーを設定していない状態では何もデータは残りませんが、クッキーを設定すると以下のように名前、メールアドレスにデータが残ります。2015-05-06_181054 どのようにクッキーを設定するかを説明します。
PHPでクッキーを発行するにはsetcookie関数を使います。
このsetcookie関数をデータの送り先であるLesson30.phpの中で使用しています。
この関数で名前などの情報をブラウザに保存します。
setcookie関数は正常にクッキーが発行されたらTRUEを、失敗したらFALSEを返します。
setcookie関数の構文は以下の通りです。2015-05-06_181054 setcookie注意点としてはsetcookieの設定は2015-05-06_1810542015-05-06_181054や空白などあらゆる出力よりも前にsetcookieを記述してください。
そうしないと2015-05-06_181054というエラーが出ます。
ですので、この例ではHTMLのタグより前にsetcookie関数を記述しています。
では例を見てみましょう。2015-05-06_181054 「クッキー名」には好きな名前を付けます。例えばメールアドレスに関係しているのならばsetmailなどと付けます。
「保存したい内容(値)」には保存したい値を記述しますが、
この例では2015-05-06_1810542015-05-06_181054を指定しました。
これらはフォームに入力したデータです。
「有効期限」には2015-05-06_181054を指定しました。
これは1分を意味します。
time()は関数ですが、この関数は1970年1月1日00時00分00秒からの経過秒数を返す関数です。
つまり、この例の場合にはクッキーの有効期限は1分で、それを過ぎますとデータの保存は消えます。
他に以下の時刻を設定できます。2015-05-06_181054 setcookieのその他の引数の意味は以下の通りになります。
「クッキーが有効なパス」は今回は省略していますが、デフォルトではカレントディレクトリとなります。
以下の通り2015-05-06_181054を指定すると今の演習の環境であればlocalhostの下で有効になります。2015-05-06_181054 また、以下の通り2015-05-06_181054などと指定するとuserディレクトリとその下のディレクトリのみ有効になります。2015-05-06_181054 [クッキーが有効なドメイン] は今回は省略していますが、例えば以下の通り2015-05-06_181054というドメインを設定すると、そのサブドメインすべてでクッキーを有効にできます。2015-05-06_181054 「SSLフラグ」は今回は省略していますが、trueを設定するとJavaScript のようなスクリプト言語からはアクセスできなくできます。
しかしながら、このSSLフラグは全てのブラウザでサポートされているわけではありません。
次にその保存したクッキーのデータを取得する方法について説明します。
保存したクッキーのデータを取得するには2015-05-06_181054を使用します。2015-05-06_181054 「クッキーの名前」はsetcookie内の先頭の引数を書きます。2015-05-06_181054 この例では以下の箇所でクッキーのデータを取得しています。2015-05-06_181054 では具体的にこのプログラムについて説明します。
初めに2015-05-06_181054にアクセスする時には2015-05-06_181054には何もデータが入っていないので、else以下のプログラムに移動します。
つまり、カラのデータが代入されます。
2回目のアクセスの時には$nameと$mailにデータが代入されます。2015-05-06_181054 そして、次に保存したデータをフォームのテキスト欄に表示させたいのでvalue属性の箇所にクッキーで取得したデータが入っている$nameや$mailを記述しています。
それをprintで出力しています。
これで改めて最初から入力しなくても、以前入力したデータが表示されるようになります。2015-05-06_181054
次にクッキーを削除する方法について説明します。
クッキーはセキュリティの観点からずっと保存しておくのは良くありません。
そこである一定の時間が過ぎたら削除するのが良いでしょう。
この例ではクッキーを削除するために新たに2015-05-06_181054を作成しました。2015-05-06_1810542015-05-06_181054 Lesson29.phpに以下の「クッキーを削除する」というリンクがありますので、これをクリックすると2015-05-06_181054のリンクに飛んでクッキーを消すことが出来ます。2015-05-06_181054 「nekota1.php」に飛びますと以下の2行が書いてありますが、setcookieの有効期限に過去の時間を設定することにより、クッキーを削除しています。2015-05-06_181054 この例では2015-05-06_181054に設定しています。
クッキー名には消したいクッキー名を記述し、保存したい内容(値)には2015-05-06_181054を記述します。
これでクッキーが削除されたので、戻るボタンを押して、フォームの入力画面に戻ってください。名前、メールアドレスのデータが消えているのが分かります。

カテゴリー
Perl

掲示板を作ろう

この章では掲示板の作成方法について説明します。
掲示板を作成するためにはフォームが必要です。
フォームとは会員登録でお名前、住所などを入力したことがあると思いますが、これがフォームです。
フォーム自体はHTMLで作るのですが、その入力データをCGIに引き渡す方法などを学習します。
入力データをCGIに引き渡す方法として、GET方式とPOST方式があります。
この送信方法の指定は、HTMLの入力フォーム上で以下の通り指定します。111 つまり、get方式はフォームの送信データがURLとして渡されると言うことです。
そのため送信する情報には制限が有り、最大で約2000文字位です。
1POST方式の場合はフォームに入力したデータはHTTPプロトコル(下の補足を参考にしてください)という通信の機能によりリクエストボディつまり本体部分に入力されてサーバに送られます。
POSTの場合は送る文字数に制限はありません。
1では例をみてみましょう。
長いプログラムですので、分割して書きますが1つのプログラムです。111111 ここまでが掲示板の骨格です。
ここから下のプログラムはすべてサブルーチンになりますので、上の骨格の部分から呼び出しています。11111111 上のプログラムを実行しますと以下のフォームが表示されます。
1では、具体的な説明を始めます。
1=> 「require」は外部のファイルをプログラム内に挿入するために使います。「jcode.pl」は 文字コードを変換してくれるライブラリです。
ライブラリとは 複数のサブルーチンをまとめたファイルのことを言います。
ライブラリを皆が使えるように無料で公開している人や団体がいるのですが、1もその内の1つです。
このファイルは以下のURLで手に入れることが出来ますので、このファイルの中身をコピーして、名前を「jcode.pl」にして、このCGI プログラムと同じフォルダに置いてください。1 この「jcode.pl」は何に使うかと言いますと
ユーザーがフォームに入力する文字は1つの文字コードで決められているわけはありませんので、この「jcode.pl」を使って、文字を自身で決めた文字コードに変換します。
この例の場合には1に統一したいので、この文字列に変換します。
変換の方法は後で説明しますが、1のように書いて、「jcode.pl」の中のサブルーチンを呼び出して変換します。

2
1=>insertサブルーチンはフォームから出力されたデータを受け取るサブルーチンです。
詳しくは後ほど説明します。
1=>このプログラムは「board.dat」に投稿された記事を記録していきますので、「board.dat」というファイルを作成してCGIプログラムと同じフォルダに入れてください。
もしファイルが存在しないなどの問題がある場合にはerrorサブルーチンが作動します。
errorサブルーチンの具体的な内容は後ほど説明します。
errorサブルーチンの呼び出しはopen関数とサブルーチンの間にorを入れて1のように書きます。
そして「<FILE>」でファイルの中身を読み込んで@infoに入れています。初めてのアクセス時には@infoはカラなので何も入っていません。
1=>これはHTMLのhiddenを利用した方法です。
1フォームからデータが送信されるとこのhiddenも送信されるので、このhiddenの値がkakuの時にwritefileサブルーチンを起動させます。
このサブルーチンはフォームから送信されたデータを「board.dat」に記録するサブルーチンです。
writefileサブルーチンの具体的な内容は後ほど説明します。
111=>action属性の値に1という箇所がありますが、このハッシュには実行しているパスを含むファイル名が代入されています。
「SCRIPT_NAME」は環境変数と呼ばれていて、1という構文でパスを含むファイル名が取得できます。
環境変数は他にも多数ありますが、例えば以下のような環境変数があります。
1「SCRIPT_NAME」は著者の例では1に相当します。
つまり、action属性の値にはどのファイルに送信するのかを書きますので、この例では投稿ボタンを押すと再び1に戻ることを意味します。
ではURLにファイルを指定して、実行してください。
1もし、「board.dat」が存在しないのならばファイルエラーと表示されます。
1これはerrorサブルーチンが作動した結果です。
1の他に2か所errorサブルーチンがありますが、これはファイルが開けなかったときに実行されます。
サブルーチンの呼び出し側の引数には1が入っていますが、これが1に代入されますので、エラーが起きた時には1と出力されます。
エラーが無ければ以下のフォームが表示されますので、フォームに名前などを入力して、投稿をクリックします。
11このinsertサブルーチンは簡単に説明するとフォームから送られてくるデータを以下のハッシュに入れる機能を持っています。
1ではinsertサブルーチについて説明します。
postで送られているのならばread関数の中の$subにフォームから送られてきたデータを代入します。
11read関数はファイルハンドルから指定したバイト数のデータを読み込み変数に代入します。
この例の場合のファイルハンドルはSTDINを指定してください。
ファイルハンドルは通常はこれまで使用してきたようなファイルに関連づけされたファイルハンドルですが、STDINはPOSTでデータを送るときに使われる特殊なファイルハンドルです。
1にはPOSTで送られてきたデータの文字数が代入されています。これは先ほど説明した環境変数です。
基本構文は1です。
1もしpostではなくgetで送られてきたのならば1に送られてきたデータが代入されているので、それを$subに代入します。
これも先ほどと同じで環境変数です。
1getで送られる場合にはデータは1に代入されていると覚えてください。
次に以下の箇所の説明をします。
1=>フォームからデータが送られるときには以下のようにフォームの
1を&で繋げた状態でデータが送られてきますが、このままでは配列に入れることが出来ませんので、splitで切断します。splitで切断する作業は2回行うのですが、初めに「&」で区切ったものを配列に入れます。
1@dfrには分割したものが以下のようにして入ります。
1さらにこの@dfrの中の要素を「=」で区切ります。1111111

例えばフォームに「近藤」と、入力して送るとします。1111

splitで分割した後にすることはURLエンコードして送られてきたものをURLデコードしなくてはいけません。
URLデコードはURLエンコードされたものを元に戻すことを言います。
URLデコードは以下の部分で行います。
1=>半角スペースを表す「+」を元の空白に戻すには1と書きます。
次に以下の箇所を説明します。1 111111次は以下の箇所の説明をします。1 1111次の箇所の説明をします。
11なぜこの作業を行うかと言いますとHTMLのタグをそのまま送信してしまうと掲示板などにいたずらされる可能性がありますので、それを防ぐために変換を行う必要があります。
1次に以下の箇所の説明をします。
1=>最後に$inputというハッシュに分解した$keyと$value」を入れています。
1では説明をしていきます。
「投稿」ボタンを押しているので、以下のhiddenが実行され、if文がTRUEになり、writefileサブルーチンが呼び出されます。
1writefileサブルーチンではフォームから送信されたデータと日付をファイルに書き込みます。
ではwritefileサブルーチンの説明を始めます。
1=>ここではフォームから送信されたコメントがカラの場合にはerrorサブルーチンが呼び出され1が出力されます。
カラを表現するには1のようにダブルクォートを続けて書きます。
$inputにはinsertサブルーチンで取得したデータがハッシュの形式で保存されていますので、ここでデータが入っているかどうかを確認しています。
次に以下の箇所の説明をします。
1=>ここでは localtime関数とtime関数を使って日付や時刻を取得しています。
1time関数をこのままの状態で使っても、ただ数字が並んでいるだけで意味が分かりませんので、 localtime 関数の引数にtime関数を入れますと我々が分かりやすい数値をリスト形式で取り出すことが出来ます。
以下の基本構文の左辺を見ると月や分などのリストになっていますが、time関数の経過秒が月、分などに変換します。
1曜日を日本語で得たい場合には自身で曜日の配列を作成して、曜日の入った変数の数値を添え字にして配列からデータを得ます。
111111=>ここではlocaltime関数で取得した変数に書式を付け加えています。
つまり指定した値、例えば$year,$monなどをsprintf関数で
書式指定文字通りに変換します。
基本構文は以下の通りです。
111例のように% とアルファベットの間に1など数字がありますが、これは桁数を指定しています。
「%4d」であれば4桁の整数を意味します。
「%02d」であれば先頭に0を付けた2桁の整数を意味します。
11111次の箇所の説明をします。
1=>unshiftは配列の古いデータの先頭にデータを追加します。
これは常に新しいデータが画面表示の上に来た方が読みやすいので、unshiftを使ってデータを上に配置するようにしています。
@infoには以下のデータを入れています。
11次に以下の箇所の説明をします。
1=>ここではファイルにデータを書き込んでいます。
ここまで終わりますと「board.dat」には以下のように書き込まれます。
11111以下の箇所で「board.dat」に入っているデータを画面に表示します。
11ファイルに入っているデータを取り出すのですが、ファイルにはタブ区切りでデータが入っているので、splitで区切ります。
区切られたデータはそれぞれ$date, $head, $name,$contentsに代入されるので、あとはprint文でそれぞれを出力します。
結果は次のようになります。1