2011年3月13日日曜日

nScript講座 第16回

地震にめげずにプログラミングを勉強しますよ!!

今回はファイル操作関数の続きですね。
と言いたいところですが、ちょっといいネタを見つけたのでそっちを先に
片付けてしまおうとおもいます。



では、以下二つのサンプルを見てください。

/////////////////////////////
Function main() {

t=GetSystemTime();
puts (t["year"]);
puts ("year\n");
puts (t["month"]);
puts ("month\n");
puts (t["day"]);
puts ("day\n");
puts (t["hour"]);
puts ("hour\n");
puts (t["minute"]);
puts ("minute\n");
puts (t["second"]);
puts ("second\n");
}
/////////////////////////////
Function main() {
t=GetSystemTime();
puts ("%t[\"year\"]% year\n");
puts ("%t[\"month\"]% month\n");
puts ("%t[\"day\"]% day\n");
puts ("%t[\"hour\"]% hour\n");
puts ("%t[\"minute\"]% minute\n");
puts ("%t[\"second\"]% second\n");
}

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


1つ目は、懐かしき日の時間をシステムから受け取って
実行するプログラムです。第10回ですね。

2つ目も同じプログラムです。

何が違うか、と聞かれたらやっぱり短さです。
短くなってますよね。2つ目のほうが。その代わりなんだかごちゃごちゃとしています。

ちょこっとの解説になりますが、きちんと話しましょう。

僕は、第回にGetLocalTime()を解説したとき、ここがいまいち
わかっていなかったので、あえて今回のような記述はしないで済ませておきました。

それによってできあがったのが、1つ目のサンプルです。
せっかく文字列中に%〜%としることで変数の展開ができるのに、配列も
普通の変数と変わらないのに、僕は、なんかうまくいかないから遠ざけて
いたんです......(なんかブラック

つまりどう書きたかったのかというと、
puts("%t["year"]% year");
として、この連想配列を展開して記述がしたかったのです。

しかしこの記述では大きな問題があります。
nScriptが文字列を文字列と認識するための定義は
「"ではじまり、"で終わるものの間に挟まれているもの」
なのです。(多分)

ですから上の記述をしてしまうと、%t[だけが文字列として見られてしまい、
エラーが発生するのです。

やっかいです。ではどうすればよいでしょう。。

問題点は、ダブルコーテーションが重なってしまうので途中までしか文字列
とみなされないということです。

ここまで考えると、解決策が思い浮かびます。

何がいけないかといえば、真ん中二つのダブルコーテーションが文字列としての
ダブルコーテーションとみなされてしまうことがいけないわけです。

ですから、真ん中二つのダブルコーテーションを、記号としてのダブルコーテーション
ではなく、文字列としてのダブルコーテーションと認識させればいいのです。

この感覚は初期のころにかんじたはずです。


改行を¥nとして特殊な形で文字列の改行として認識させる。

ダブルコーテーションを、¥"として特殊な形で文字列の
ダブルコーテーションとして認識させる。


2つとも同じことです。

つまりはエスケープシークエンスを用いて、ダブルコーテーションを文字列の
ダブルコーテーションとして記述すれば、連想配列から正確に値を取り出せるわけです。

エスケープシークエンスは、今まで説明したものだと

・%~% ~の中身を文字列中に展開

・\n 改行

の二つです。
つまりは文字列中で特殊な働きをするものです。
ここに、

・\" 文字列としての"

を加えるイメージです。

ではこれを踏まえて2つ目のサンプルを見てください。
連想配列に文字列を渡す再に\"を用いました。
それでは実行してみて、うまくいくことを確認してください。

うまくいきましたね?

これで今日の本題は解決しました。めでたしめでたしー。
今回説明したエスケープシークエンスはまだ一部です。
以下に例をすべてあげておきます。今後はこれが頭に入っている、もしくは
すぐに確認することができることを前提として講座を書くので、見ておいてください。

・\r 複改

・\t タブ文字

・\\ 文字列としての\

・\b バックスペース

・%% 文字列としての%

・\ooo 8進数表記の一文字

・\xhh 16進数表記の一文字

よくわからないのはそう思ってるだけでいいです。

どうせPineも理解してません←


ではお疲れ様でしたー。
今後も地震にお気をつけて。


Written by Pine

5 コメント:

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

ブラックw
なつかしいですねぇ..これ
ありがとうございます、次の学校で試しt(

mikan さんのコメント...

nScriptの言語使用を読んでたらやっと気がついたんですよ...w

これからもお願いしますねw

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

えっと...これはあれですよね
puts (%t[\"year\"]% year\n");ではなく
puts ("%t[\"year\"]% year\n");な気がするのですが..
違ったらすみません

mikan さんのコメント...

>>よつさん

そうでした!!ありがとうございます!!

ところでところで最近停滞気味というかなんと言うか....
放置してしまって本当にすみません!!
基本学校の空き時間を使って書いていたので、明日から学校がはじまれば、またいつものペースを取り戻す予定なので!

言い訳がましいですがどうぞよろしく!

mikan さんのコメント...

自分ながら努力はしてみているのですが。。。
もろもろ、いろいろなところがやっぱりまだわからないので、あえてもっと上級のC言語に挑戦することで学んでいます。
こっちノ言語は制限が厳しくて大変です、、

コメントを投稿

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