2010年12月16日木曜日

nScript講座 第11回

やってまいりました11回。
今日はちょっと難しいけど、大きく一歩踏み出せる関数を扱います。



講座は以下から。


//////////////////////////

switch (cmd) {
case "cd":
puts ("Please type directory\n >");
dir=gets(25);
if(SetCurrentDirectory(dir) == -1){
puts("Can't change directory\n");
} break;

case "pwd":
puts ("%GetCurrentDirectory()%\n");
break;
}

//////////////////////////

cmd=gets(10);

//////////////////////////

はい。
これらを前回作ったものに追加するか、また新しく簡易的なものを
作成して試してください。
見てわかるとおり、今回既習のpwdコマンドに新しく
cdコマンドを追加しました。

cdとはどのようなコマンドかを説明する前に、少し説明がいります。


プログラムは、実行している最中に
「いまどこのディレクトリを見にいっているのか」
という情報を持った上で動作しています。
起動直後には基本的にスクリプトファイルが置かれている場所もしくは
実行ファイルが置かれている場所がいまいるディレクトリとなります。
そして、その今いるディレクトリのことを、カレントディレクトリといいます。

カレントディレクトリは英語で、CurrentDirectoryです。
つまりGetCurrentDirectory()は、このカレントディレクトリを返すわけです。

では、このカレントディレクトリを変更するためにはどうすればいいでしょうか?
そのときには変える関数を用いればよいわけです。
それが、SetCurrentDirectory()です。
カレントディレクトリの決定、という感じの意味です。こいつにディレクトリを
渡すことによってカレントディレクトリを移動することができます。

と、いうわけで今回のスクリプトは、cdでディレクトリを変えて、pwdで
変えられているかを確認する、というスクリプトになっています。

また、cdコマンド部では、入力してもらった値で関数を実行しますが
関数がif文にのっとられてしまっています。
条件式の比較のときに実行され、返し値をそのまま比較にかけているのです。
ですから関数自体はきちんと実行されます。
では、-1が返されるときというのはどのようなときでしょうか?
それは、SetCurrentDirectory()が移動できない不正なディレクトリを
渡されて、移動に失敗した場合もしくはアクセス権のないところに
アクセスをしようとしたときにエラーとして-1を返すわけです。
で、-1を返されたら失敗しましたと表示して元に戻るという訳なんです。

これだけではつまらないですが、大丈夫です。
努力はいつか報われますからw
しかし何はともあれこれでターミナルのようにいろんなところを探検できる
ようになりました。
あとはそれを利用して便利な動きをするものを作るだけです。
そうですね。簡単そうなものでいったらcatコマンドあたりでしょうか?
これはファイルの中身をダンプして表示してくれるコマンドです。
次回あたり実装しましょう。楽しみにしていてくださいね。

では。







・・・・・・・・・・・補修タイム・・・・・・・・・・

補習授業です。
ディレクトリって何?!って人もいると思うのでその辺に関して
もうちょっと話をします。知ってる人は帰っていいですよw

フォルダの概念はみなさんわかりますね?
図に表すと、四角く大きいフォルダがあって、その中に何個も
フォルダがあって、さらにそのなかにはファイルがあって.....
と、どんどん内側に狭まっていくような図が思い浮かぶと思います。
この状況を仮に、フォルダAの中にフォルダBとフォルダCがあり、
フォルダの中にファイルA、ファイルBがあったとします。

これをディレクトリの考え方としてしめすと......









つまりはこういうイメージなんです。
フォルダの考えを→方向に広がるツリーとして考えます。
このときフォルダAを一番上のディレクトリとしたときに、
ファイルAは
\フォルダA\フォルダB\ファイルA
とあらわします。
\は皆さんの環境によってどう表示されるか変わります。
お金の円マークになることもあれば、/の反対になることも
あるのです。バックスラッシュといいますが。
どちらにしろ0の3つ右隣のキーがその文字になってます。
ではいまやったことを生かしてちょっと見覚えのあるものを
書いてみます。
C:\Program Files\Lhaplus\
はい。これで前までよくわかんなかったディレクトリの概念
が見えてきませんか?
フォルダもディレクトリも呼び方が違うだけです。
ようは入力するときはいまやったようなものを入力すれば
cdでそこに飛んでくれます。
自分がいまフォルダAにいるとしたら、
フォルダB
と入力すればフォルダBに移ってくれます。
いまフォルダCにいるとしたら
..
と入力するとフォルダA、つまり一個上の階層に飛んでくれます。
どこにいようと、
/フォルダA/フォルダB
と指定すれば、絶対にフォルダBに飛んでくれます。

..は一個上のディレクトリという意味を表します。
このとき前の二つを相対パスとよび、最後の一個を絶対パスと
呼びます。

覚えておいてくださいね。
では今日はこの辺で。

2 コメント:

よつ さんのコメント...

おお、これは個人的にはエラーメッセージの出させ方がうれしいです!w
エラーの時に返される-1を条件に入れているということでしょうか...?

mikan さんのコメント...

そういうことですね。
「もし、この関数を実行して-1を返したら」
ということなので実行はされているというのがポイントです。

でもやっぱここの記述は感動ですよね!

サンプル読むときにこういうのに気がつかないで適当に読み飛ばすと痛い目にあいますから...覚えておいてください!

コメントを投稿

Related Posts Plugin for WordPress, Blogger...

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Walgreens Printable Coupons