////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

    送信日： 2003/04/14(Mon) No.202
    配信数： 3210 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００３年４月１４日（月）の更新                */
http://www.kab-studio.com/

・更新なし……。
　私用により時間取れなくてほとはー更新できませんでした……って、それ
じゃあかんよね、ゴメン……。


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.com/nikki2/

2003/04/06 (Sun)
　４月表紙壁紙！　パースおかしい……。描き方戻しました。日曜朝の新番
組。でじこいいなぁ。こみパ。南さんいいなぁ（爆）。ぷらとわほむぺ版。

2003/04/07 (Mon)
　すさまじく眠い。 LAN カードとか購入。そして新しい表紙。見やすいら
しい。

2003/04/08 (Tue)
　二度寝して午前休。午後からまったり。 Struts 便利。 
PropertyUtils#copyProperties() とか。月曜夜の LAST EXSILE がかなりい
い感じ。今クールの。そして横浜在住。

2003/04/09 (Wed)
　前プロジェクトと新プロジェクト開始。 SQL Server 初めて。ニニンが
シノブ伝がバカでいい。月箱予約。アニメは……。

2003/04/10 (Thu)
　久々 C コードをがーっと。６時くらいには完成したです。カレイドス
ターが潰れた……。そして LA と新川崎。

2003/04/11 (Fri)
　会社で色々。宝の山〜！　こんなドキュメントがあるなんて！　サーバー
案。安く買うか、自作するか、中古にするか。そしてステルヴィア。

2003/04/12 (Sat)
（私用によりお休み〜）


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第七章　告白　−３−

「だいたい」
　美咲の言葉に、リシュネは日本茶を飲みながら耳を傾けた。
「あの泉が突然光った時に初めて、私は書庫に入ったくらいだもの」
「それまでは調べようという気が起きなかった？」
「その必要がなかった、と言う方が正しいわね。必要な事は母から口伝で教
わっていたし、それで十分だった」
「消極的ね」
「当然よ。私だって継ぎたくなかったから」
　こんなこと、２人には言えないけどね。
「母親から教わった事は？」
「泉は水の力の源だとか、だから管理しないといけないとか、水の力の使い
方とか、そういうこと。そもそも」
　美咲は茶をすすった。
「ここが碧き泉って名前で、他に泉があるって事も、あの文献を読んで初め
て知ったんだから」
「他って」
「あ、朱き泉ね。似たような泉があるって聞いたことはあるけど、それだ
け。彼は自分の事はあまり話そうとしないから」
「確かに、あの人ってそういう感じの人ですよね」
　ずっと話しだけを聞いていた恭子が口を挟んだ。と言うより、チンプンカ
ンプンな単語が多くて話題に参加しようがなかった。
　ちなみに俊雄は、気の抜けた顔のまま、ぼーっと聞いていただけだった。
「だから、彼の故郷とか、朱き泉の場所とかは訊いたことなかったし、言っ
てくれもしなかったから、場所は判らないのよ」
　リシュネは頭を下げた。
「ありがとう」
「え、ええ……」
　そしておもむろに立ち上がる。
「書庫？」
「一応、自分の目で確認したいから」
「楠居さん、案内してあげて」
「はい」
　にこやかな顔で割烹着姿の女性がリシュネを案内する。
　美咲は閉じたドアの先をずっと見つめ続け、２人の足音が聞こえなくなっ
て初めて。
「……ふぅ」
　気の抜けた声を出して姿勢を崩した。
「？」
「あ、ううん、なんでもないの」
　そう、緊張していたのは私だけ。汗ばむ手は、確かに震えていた。
「よく……」
　と言ってから、ふたりの視線を感じて、言葉を飲んだ。
　よく、舞はこんな人達と一緒にいられる……。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『日記のネタがアニメの新番組ばかり……』
「かなりあれだね……」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 11.02
ファイル名を抜き出してみよう

「では今回から実践的な文字列操作についてみていきます」
『はーい』
「まずは、ファイルパスからファイル名だけ抜き出してみます」
『ってゆーと』

C:\Test\Test.txt

『から』

Test.txt

『だけ取り出すってこと？』
「そういうこと。方法はいくらでもあるし、簡単にできる方法もあるんだけ
ど、今回は文字列操作の勉強が目的だから」
『ちょっと難しい方法でする？』
「難しいというよりは、べたな方法っていうか……方針としては」

１：一番最後の \ の位置を求める。
２：そこから最後までを取り出す。

「って感じ」
『一番最後の \ を探すのって、なんかそういうランタイムある？』
「ランタイムにはないね。 CString にはあるけど」
『じゃあ』
「でも今回は使用不可」
『むー』
「オーソドックスな方法だと、後ろからひとつひとつ見ていくって
感じかな。たとえばこんなふうに」

void OutputFileName()
{
    char ch[] = "C:\\Test\\Test.txt";

    // 後ろから見ていきます。
    for( int iIndex = strlen( ch ) - 1; 0 <= iIndex ; iIndex-- )
    {
        TRACE( "%c\n", ch[iIndex] );
    }
}

『 for で……最初に strlen() 、ってことは文字列のサイズ？』
「一番後ろから見ていくから、まずその最後の文字の位置を取っておきま
す。 - 1 してあるのはなんでかわかる？」
『えっと……文字列の長さって確か大きいんだよね。 strlen( "A" ) は 1 
だけど、この文字は [0] なんだから』
「そういうこと。まぁ最後の文字は文字列の長さ - 1 って憶えちゃっても
大丈夫だけどね」
『で、これを…… -- でひとつずつ減らしていって、それが 0 以上の間は
ってことね』
「図にすると」

      C:\Test\Test.txt
    -1  2  5  8  11 14
      0  3  6  9  12 15
       1  4  7  10 13 

『見にくい……』
「う”……ようするに先頭の C は 0 、最後の t は 15 。全部で 16 文字
だから。で、これを実行すると」

t
x
t
.
t
s
e
T
\
t
s
e
T
\
:
C

『後ろから１文字ずつ出力できるわけね』
「 \ の位置は ch[iIndex] が \ だったところだから、ファイル名はその次
の文字からコピーします」

void OutputFileName()
{
    char ch[] = "C:\\Test\\Test.txt";
    char chOut[MAX_PATH];

    // 後ろから見ていきます。
    for( int iIndex = strlen( ch ) - 1; 0 <= iIndex ; iIndex-- )
    {
        if( ch[iIndex] == '\\' )
        {
            // \\ がみつかりました。
            // その次の文字から最後までコピー。
            strcpy( chOut, &( ch[iIndex + 1] ) );
            break;
        }
    }

    // 出力します。
    TRACE( "%s\n", chOut );
}

『 \ と直接比較して、見つかったら……？？』
「ここはちょっと難しいかな」

            strcpy( chOut, &( ch[iIndex + 1] ) );

『 strcpy() は文字列を右から左にコピーするランタイムだよね。でも、そ
の右っかわがよくわかんない……』
「ひとつひとつ見ていこうか」

    ch[iIndex + 1]

『なんで + 1 してんの？』
「だって、 ch[iIndex] の文字は？」
『 \ 』
「そこからコピーしたら \ が入っちゃうでしょ」
『あ！　だから次の文字からなんだ』
「そういうこと。じゃ、次」

    &( ch[iIndex + 1] )

『 & ……ってことは、アドレス？』
「そういうこと。メモリ上だと」

43 3A 5C 54 65 73 74 5C 54 65 73 74 2E 74 78 74 00
C  :  \  T  e  s  t  \  T  e  s  t  .  t  x  t  \0

「ってなってるでしょ。最後の \ の右側、つまり」

54 65 73 74 2E 74 78 74 00
T  e  s  t  .  t  x  t  \0

「が欲しいんだから、この最初の文字のアドレスがわかればいいわけ」
『この最初の文字が ch[iIndex + 1] 、そのアドレスだから & を付けるん
だ』
「そういうこと。で、それを strcpy() でコピーすれば」
『そこから最後までが取り出せて……』

Test.txt

『って出力されるわけねー』
「これはあくまで方法のひとつだし、もちろん CString が使えるならその
メンバ関数を使った方がいいからね」
『はーい』
「で」
『で？』
「こういう関数は、汎用的に色々な場面で使うことになります。文字列処理
ってよくあることだからね」
『だよね、そのたびに１から作ったら大変だもん』
「そのためには文字列を引数として受け取るようにする必要があるね」
『あ、そういえば』
「次に、取り出したファイル名をどう返すかっていう問題があります」
『もんだいなの？』
「大問題。たとえば」

char *OutputFileName()
{
    char ch[] = "C:\\Test\\Test.txt";
    char chOut[MAX_PATH];
    // (略)

    return chOut;
}

「が不可なのはわかるよね」
『えっと……あ！　 chOut って関数の中の変数だから、関数から抜けると
なくなっちゃう！　だからそういう変数のポインタを戻り値にしちゃいけな
い！　って話だったよね』
「そうそう、 Version 4.13 ( No.063 ) でやったね」
『あ！　じゃあ、 strcpy() みたいに、引数で渡してもらってそこにコピー
すればいいんだ』
「そうなるかな。あと、エラーチェックも欠かさずにしないと」
『エラーチェック？』
「渡された文字列ポインタが NULL だったらダメでしょ」
『そういうチェックって必要なの？』
「できるならしておいた方がいいよ。まぁするにしても、エラーがあったと
きにどう処理するかっていうのも考えないといけないけど」
『確かに……』
「他にも、プログラム上問題はないかっていうのも考えないと」
『問題？』
「たとえば」

    char ch[] = "C:\\Test\\";

「みたいに、最後に \ があっても大丈夫か？　とか」
『え？』
「ほら、 iIndex + 1 ってしてるから、 \ の右側を見るわけでしょ」
『あ！！　配列からはみ出ちゃう！！』
「でも \0 にアクセスするだけだから大丈夫」
『あ……うー、なんかすんごくどきっとしちゃったよ』
「でも strcpy() に \0 の場所渡しても大丈夫かな」
『！！』
「とか、そういうふうに色々検証しなきゃいけない部分があるってこと」
『なんかすんごくドキドキするよー』
「その気持ち、忘れないようにね」
『？？』
「変な関数作って迷惑掛けてもいいや、みたいに思わないことが大切だか
ら。あともうひとつ」

    char ch[] = "C:\\Test\\ソフト.txt";

「がちゃんと切り取れるかどうか」
『そんなの当たり前じゃげげ！！』

フト.txt

『な、何これ〜　』
「というわけで次回に続く」

/*
    Preview Next Story!
*/
『なにこれなにこれ！！』
「ビックリした？」
『ビックリした！　なんでこんなんなっちゃうの！？』
「それを次回解説します」
『というわけで次回』
＜ Version 11.03 Shift JIS ＞
「につづく！」
『あーもう、ドキっとさせないで！』
「いや、これからそんなの何度もあるし」
『げ』
「それに……ドキっとするだけで済めばいいけど……」


////////////////////////////////////////////////////////////////////
/*                ２００３年４月２１日（月）の更新                */
http://www.kab-studio.com/

・ほとはー追加予定
　三人合体ホットハーブに１話追加予定。来週こそは！


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.com/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.com/Info/MailMagazine/

    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

