(現在 過去ログ6 を表示中)

HOME HELP 新着記事 トピック表示 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■8359 / inTopicNo.1)  キーワード検索+ソートするには・・・
  
□投稿者/ hiro -(2004/01/07(Wed) 17:58:43)
    こんにちは、hiroといいます。

    フリーで配布されているCGIプログラム(perl5)をカスタマイズしています。
    CGI初心者なもので、マニュアルなどを参考に見よう見まねで改造しています。
    キーワードで検索した結果を、$dat の項目でソートしたいのでが、どうしてもできません。
    「検索した結果を、printで出力する前に、配列に入れなおしてソートする」
    という手順でいいかと思うのですが、どのように記述してもソートしてくれません。
    どなたか教えていただけると幸いです。
    オリジナルソースの該当部分は、次の通りです。

    $in{'word'} =~ s/ / /g;
    @word = split(/\s+/, $in{'word'});
    open(IN,"$logfile") || &error("Open Error : $logfile");
    $i=0;
    while (<IN>) {
    ($no,$mae,$ato,$mid,$com,$dat,$p1,$p2,$p3,$s2,$s3) = split(/<>/);
    $flag=1;
    foreach $key (@word) {
    if (index($_,$key) >= 0) { $flag=1; }
    else { $flag=0; last; }
    }
    if (!$flag) { next; }
    $i++;
    print;
    }
    close(IN);

    よろしくお願いします。
引用返信 [メール受信/OFF] 削除キー/
■8362 / inTopicNo.2)  Re[1]: キーワード検索+ソートするには・・・
□投稿者/ りゅういち -(2004/01/07(Wed) 23:18:05)
http://www.cj-c.com/
    No8359に返信(hiroさんの記事)
    > キーワードで検索した結果を、$dat の項目でソートしたいのでが、どうしてもできません。
    > 「検索した結果を、printで出力する前に、配列に入れなおしてソートする」
    > という手順でいいかと思うのですが、どのように記述してもソートしてくれません。
    > オリジナルソースの該当部分は、次の通りです。
     :
    > print;
     :


    $dat の内容にもよりますが、Perlには sort という便利な関数があるので
    それを使うと良いと思います。

    例えば上記の print; というところで検索結果を表示しているわけですから、
    ここで、$dat を先頭にして新しい配列に入れちゃいます。
    print; → push(@Sort,"$dat<>$_");
    でそのあと、 @Sort=sort(@Sort); として、
    forreach (@Sort){
     ($dat,$no,$mae,$ato,$mid,$com,$dat2,$p1,$p2,$p3,$s2,$s3) = split(/<>/);
     print;
    }
    とすればいけそうな気がします。
引用返信 [メール受信/OFF] 削除キー/
■8366 / inTopicNo.3)  Re[2]: キーワード検索+ソートするには・・・
□投稿者/ hiro -(2004/01/08(Thu) 10:18:05)
    No8362に返信(りゅういちさんの記事)
    > ■No8359に返信(hiroさんの記事)
    >
    > $dat の内容にもよりますが、Perlには sort という便利な関数があるので
    > それを使うと良いと思います。
    >
    > 例えば上記の print; というところで検索結果を表示しているわけですから、
    > ここで、$dat を先頭にして新しい配列に入れちゃいます。
    > print; → push(@Sort,"$dat<>$_");
    > でそのあと、 @Sort=sort(@Sort); として、
    > forreach (@Sort){
    >  ($dat,$no,$mae,$ato,$mid,$com,$dat2,$p1,$p2,$p3,$s2,$s3) = split(/<>/);
    >  print;
    > }
    > とすればいけそうな気がします。

    りゅういちさん、さっそく教えていただきありがとうございます。
    記述して試してみました。
    結果は、ソートされて出力されるのですが、
    以下のようになりました。
    [$no...$s3]のデータのセットのうち、
    まず、$no(=登録ナンバー)の1のセットが出力され、
    次に、$no=2までのセットが$datの項目でソートされて出力、
    次に、$no=3までのセットがソートされて出力、
    と続き、最後に検索キーワードとマッチしたデータセットがソートされて出力されます。
    きっと、foreachのループ処理の問題かと思いますが、
    いろいろ試してみても解決できません。
    この最後のデータセットだけ取り出して出力するにはどうしたらいいのでしょうか。
    また、$datのデータは数値(整数)で、この方法の場合、降順にソートするにはどうすればできますか。
    アドバイスいただけることがあれば、よろしくお願いします。(hiro)
引用返信 [メール受信/OFF] 削除キー/
■8369 / inTopicNo.4)  Re[3]: キーワード検索+ソートするには・・・
□投稿者/ りゅういち -(2004/01/09(Fri) 03:05:27)
http://www.cj-c.com/
    No8366に返信(hiroさんの記事)
    > 結果は、ソートされて出力されるのですが、
    > 以下のようになりました。
     :
    > きっと、foreachのループ処理の問題かと思いますが、
    > いろいろ試してみても解決できません。
    > この最後のデータセットだけ取り出して出力するにはどうしたらいいのでしょうか。

    よくわからないので、一度ソースの書いてあるファイルを .txt 形式にして
    アップ、URLを教えていただけますか?(掲示板にソースをコピーするのは×)

    > また、$datのデータは数値(整数)で、この方法の場合、降順にソートするにはどうすればできますか。

    これは sort した配列を reverse すればよいと思います。
    あと、数値の桁数が一定でない場合はそれを一定にする処理も必要です。
引用返信 [メール受信/OFF] 削除キー/
■8372 / inTopicNo.5)  Re[4]: キーワード検索+ソートするには・・・
□投稿者/ hiro -(2004/01/09(Fri) 10:58:47)
    No8369に返信(りゅういちさんの記事)
    > ■No8366に返信(hiroさんの記事)
    > よくわからないので、一度ソースの書いてあるファイルを .txt 形式にして
    > アップ、URLを教えていただけますか?(掲示板にソースをコピーするのは×)
    >
    >>また、$datのデータは数値(整数)で、この方法の場合、降順にソートするにはどうすればできますか。
    >
    > これは sort した配列を reverse すればよいと思います。
    > あと、数値の桁数が一定でない場合はそれを一定にする処理も必要です。


    CGIのファイルを.txtで次のurlにアップしました。
    http://homepage3.nifty.com/vernalwood/henshu.txt
    検索+ソートしたい部分のソースは、大きな項目の5つ目の「検索処理」の中にあります。
    数値の桁数はそろえてあります。
    降順ソートについては、@Sort=reverse sort(@Sort); としてみましたが、うまくいきませんでした。
    いろいろご迷惑おかけしていますが、よろしくお願いします。


引用返信 [メール受信/OFF] 削除キー/
■8374 / inTopicNo.6)  Re[5]: キーワード検索+ソートするには・・・
□投稿者/ りゅういち -(2004/01/09(Fri) 22:36:16)
http://www.cj-c.com/
    No8372に返信(hiroさんの記事)
    >>これは sort した配列を reverse すればよいと思います。
    > > > CGIのファイルを.txtで次のurlにアップしました。
    > http://homepage3.nifty.com/vernalwood/henshu.txt
    > 検索+ソートしたい部分のソースは、大きな項目の5つ目の「検索処理」の中にあります。

    @Sort=sort(@Sort);
    foreach (@Sort){
     :
    }
    の部分は close 関数のあとに挿入してください。

    > 降順ソートについては、@Sort=reverse sort(@Sort); としてみましたが、うまくいきませんでした。

    @Sort=reverse(sort(@Sort)); か @Sort=sort(@Sort); @Sort=reverse(@Sort);
    とかいてみてください。
引用返信 [メール受信/OFF] 削除キー/
■8379 / inTopicNo.7)  Re[6]: キーワード検索+ソートするには・・・
□投稿者/ hiro -(2004/01/10(Sat) 13:39:46)
    No8374に返信(りゅういちさんの記事)

    りゅういちさん、できました! 感激です。
    ここ何日も、ソートやループの関数をこねくり回して解決しなかったので、
    きれいにソートされた画面が出たときはホッとしました。
    まだまだPerlの構文を理解できていないんですね。いろいろ勉強していきたいと思います。
    なんとお礼をいったらいいか。貴重な時間をさいていただいて、丁寧に教えていただき、本当にありがとうございました。(hiro)
解決済み!
引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新着記事 トピック表示 検索 過去ログ

- Child Tree -