メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.485) ファイル名称比較  2004/08/16


/*========================================================*/
    <<<あゆしゃの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

ブラウザの閉じるボタンで閉じてください。