|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第485回 ファイル名称比較 発行 2004年8月16日(月曜日) 発行数 約2700 {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンは、主にまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・横60文字で作成し、インデントは大抵半角スペース4つです。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、メルマガのホームページでお願いします。 ・過去ログはバックナンバー(下欄参照)を活用して下さい。 ・内容は私が感じたもので、最新の技術も、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 ・セキュリティ突破のため、暗号化された単語があります。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは。あゆしゃです。 お盆休み、いかがでしたか? あゆしゃは、いろいろなことがありました。 ★あゆしゃ、記録更新 ★あゆしゃ、仕事をやめる ★あゆしゃ、つりに行く ★あゆしゃ、2回上陸 ★あゆしゃ、めっさ筋肉痛 ★あゆしゃ、ツタヤをやめる /*========================================================*/ ★あゆしゃ、記録更新 ファントムにて、10時間47分クリアという記録を達成 できました。 http://ayusya.hp.infoseek.co.jp/GamePhantom.html /*========================================================*/ ★あゆしゃ、仕事をやめる 10年間続けてきたお仕事を、退職しました。 生きていれば何をやっても同じ、という考えの下に、社会人に なっても続けていたアルバイトですが、 肉体労働に対する体力の限界があり、やめることにしました。 これまで土日年間600時間をアルバイトに割いていましたが、 この時間を別のことに使っていこうと思います。 ゲームとか? /*========================================================*/ ★あゆしゃ、つりに行く 毎年恒例、尾鷲(おわせ、三重県)にいってきました。 最近は有料道路がどんどん整備され、豊田市から3時間で行く ことができるようになりました。 交通費は3400円、3時間短縮するには安いものです。 成果は昨年ほど大量ではありませんでしたが、ほどほどでした。 それ以上に面白かったのが、ハリセンボンです。 うようよいました。 昨年はいなかったのに、大量発生したようです。 つれるかなと思い、エサを目の前にたらしてあげると、 フグフグフグ! ってかんじでよってきて、簡単につれました。 膨らませようと思って、頭をたたいても、膨らみませんでした。 おかしいなぁと思いつつ、腹をつついてみると、 見事に膨らみました。 針がとっても丈夫いです。 ハリセンボン、すばらしいです。 しかしアゴが強いらしく、釣り糸を噛み切られてしまいました。 /*========================================================*/ ★あゆしゃ、2回上陸 あゆしゃは、「おーくら」というお店がお気に入りで、いつも つりの帰りによっていきます。 料理屋さんで、ウナギがおいしいのでいつもそれをいただくの ですが、 しかし今回は、行きと帰りの2回もいってしまいました。 1回目にウナギを頂、2回目には川魚定食をいただきました。 どちらも量が多く、とてもおいしかったです。 「かわざかなていしょく」では通じませんでした。 「かわうおていしょく」というらしいです。不思議です。 場所は、42号線のどっか。 よく覚えていないのですが、多分、 http://map.yahoo.co.jp/pl?nl=34.21.6.783&el=136.24.56.074&la=1&fi=1&sc=7 このあたりです。かなりの辺境です。 尾鷲からみて42号線の左側にあります。 ドライブインあら竹さんの、すこし尾鷲よりです。 豊田から湾岸道路を通って、2時間ぐらいの場所にあります。 お勧めのお店です。 /*========================================================*/ ★あゆしゃ、めっさ筋肉痛 例年通りの筋肉痛にひーこらいっています。 {magclick} /*========================================================*/ 今回のお題 << ファイル名称比較 >> /*========================================================*/ 前回のすばやさアルゴリズム、アクセス統計を見るとかなりの 人気でした。私もうれしいです。 アクセス統計も右半分にグラフを表示したいと考えているの ですが、なかなかです。 さて、FindFile にてファイルを取得すると、それらしくソート された状態になっています。 しかしこれは、単純にファイル名称を文字列としてソートした だけであり、エクスプローラの表示順番とは違います。 つまり、ドット(.)区切りの複数の文字列をそれぞれ比較しない と、エクスプローラのようなエレガントな順番で表示されません。 よって、ツリーマスターには文字列比較方法を拡張する仕組みを 入れておきました。 これによって、自分で作った関数を忍び込ませることが できるはずです。 ドットを意識したファイル名称比較は、こんな感じです。 // ファイル名称の文字列比較 int filename_strncmp( char* a, char* b, int n ) { int c = 0; while( --n >= 0 ) { int a2 = *a++; int b2 = *b++; if( a2 == 0 ) return b2; if( b2 == 0 ) return a2; // . を \0 とみる if( a2 == '.' ) a2 = 0; if( b2 == '.' ) b2 = 0; // 小文字で比較する if( isascii(a2) && isupper(a2) ) a2 = tolower( a2 ); if( isascii(b2) && isupper(b2) ) b2 = tolower( b2 ); // 比較 c = a2 - b2; if( c ) return c; } return c; } // 比較方法の変更 #define DEF_TREE_STRNCMP( a,b,len ) \ filename_strncmp( a,b,len ) // 木構造の定義 #include "TreeMaster.h" /*========================================================*/ ポイントは2点、 1つはドットを終端文字ではない0として比較すること、 1つは大文字小文字を区別せずに比較すること。 tolower などの関数に日本語を指定するとおかしな動作をする ので、isascii と isupper でチェックをかけてあげます。 後はこの関数をマクロで登録し、木構造定義を行います。 {magclick} /*========================================================*/ さいごに /*========================================================*/ さすがにふぐは食べません。 ハリセンボンはふぐの亜種であり、毒はないそうですが。。 {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は8月18日(水曜日)に、第486回をお送りします。 お題は「メニュー表示」 ウィンドウのない常駐アプリでメニューを表示すると、死んで しまいます。 お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されていますか? このメールマガジンの内容に文面の引用はありませんか? めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容の、転用、流用、宣伝、リンク、 宝くじって、当たりませんね? なんて大歓迎です。 {magclick} /*========================================================*/ /*========================================================*/ 発行者 あゆしゃ ホームページ::あゆしゃの世界 http://ayusya.hp.infoseek.co.jp/ ご意見・ご感想・ご質問メール mailto:ayusya@flamenco.plala.or.jp まぐまぐ::アイディー 0000020674 まぐまぐ::登録と解除 http://www.mag2.com/m/0000020674.htm まぐまぐ::バックナンバー http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674 めーらっくす::アイディー MM3E1AEE285AB4F めーらっくす::登録と解除 http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F めーらっくす::バックナンバー★最近のものならこちらが便利★ http://www.mailux.com/mm_bno_list.php?mm_id=MM3E1AEE285AB4F |