地震にめげずにプログラミングを勉強しますよ!!
今回はファイル操作関数の続きですね。
と言いたいところですが、ちょっといいネタを見つけたのでそっちを先に
片付けてしまおうとおもいます。
では、以下二つのサンプルを見てください。
/////////////////////////////
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(
nScriptの言語使用を読んでたらやっと気がついたんですよ...w
これからもお願いしますねw
えっと...これはあれですよね
puts (%t[\"year\"]% year\n");ではなく
puts ("%t[\"year\"]% year\n");な気がするのですが..
違ったらすみません
>>よつさん
そうでした!!ありがとうございます!!
ところでところで最近停滞気味というかなんと言うか....
放置してしまって本当にすみません!!
基本学校の空き時間を使って書いていたので、明日から学校がはじまれば、またいつものペースを取り戻す予定なので!
言い訳がましいですがどうぞよろしく!
自分ながら努力はしてみているのですが。。。
もろもろ、いろいろなところがやっぱりまだわからないので、あえてもっと上級のC言語に挑戦することで学んでいます。
こっちノ言語は制限が厳しくて大変です、、
コメントを投稿