• 締切済み

日記の指定日のみ表示

200908.txt 01,2009/08/01,2009,08,日記タイトル,日記本文,302 02,2009/08/02,2009,08,日記タイトル,日記本文,303 03,2009/08/03,2009,08,日記タイトル,日記本文,304 上記のようなログがあり 「日,日付,年,月,タイトル,本文,通しナンバー」の順に並んでいます。 たとえば、8/1なら「8/1のみ表示」するには、どのように条件付けすれば宜しいのでしょうか? 色々やってみましたが、出来ませんでした。どなたか教えて下さい。

  • edct1
  • お礼率66% (6/9)
  • Perl
  • 回答数3
  • ありがとう数3

みんなの回答

  • urakids
  • ベストアンサー率77% (7/9)
回答No.3

#!/usr/bin/perl use CGI; my $q = new CGI; &main(); sub main {   my ($mode, $action, $ymd, $w, $f, @file);   #パラメータ取得   $mode  = $q->param('mode');   $action = $q->param('action');   $ymd   = $q->param('YMD');   $w    = $q->param('w');   #ファイル名生成   $f = $ymd . "\.txt";   #ファイル生存確認   if (-e $f) {     #ファイル読み込み     open(FILE, $f) or die;     eval{flock(FILE,1);};     @file = <FILE>;     close(FILE);   }   #後は原本通り   foreach my $diary (reverse @file) {     my ($day,$date,$year,$month,$subject,$descrip,$mynum) = split(/\,/, $diary);     if($diary =~ /$mynum/){       print qq|$date $subject<br>$descrip<br><br>\n|;     }   } } とりあえず書いてみたのですが、書いて思ったのが、 いまいち主旨が見えないと言うか、どうしたいのだろうと思うのですよ。 まず、 私の環境では   if($diary =~/'302'/){     print qq|$date $subject<br>$descrip<br><br>\n|;   } でも正常に動きませんでしたが、これは環境の違いかもしれないので置いておいて、 > if($diary =~/'$mynum'/){ で引っかからない部分ですが、 これは検索部分を'で括っているので、 $diary内から"$mynum"という文字列を検索している事になります。 なので引っ掛からないのは当然かと。 それとは別に、これの直前で > my ($day,$date,$year,$month,$subject,$descrip,$mynum) = split(/,/, $diary); した上で if($diary =~/$mynum/){ をやれば全てが引っ掛かると思うのですが、ここらへんがイマイチ何をしたいのか見えない所。 引っ掛けるだけなら if ("$date$day" eq $ymd) {   #処理 } もしくはパラメータから通し番号を受け取って #改行コードの削除 $mynum =~ tr/\r\n//d; if ($mynum eq $nid) {   #処理 } なんて書けば良いと思いますがどうでしょう?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

え? $diary =~/'302'/ でマッチしますか? シングルクオートが余計なので, どの行にもマッチしないと思うのですが. でも, 「8月1日分のみ表示する」なら $month==8 && $day==1 という条件でいいはずなので, その query から YMD がわかれば後はなんとでもなるはずですよ. YMD が変数 $YMD にあると仮定すると my ($yyyy, $mm, $dd) = ($YMD =~ /(\d{4})(\d{2})(\d{2})/); で $mm に月が, $dd に日が入ります. で, if ($month == $mm && $day == $dd) { print それ } という形にすればいい. ど~しても正規表現でマッチさせたいなら if ($diary =~ m!/$mm/$dd/!) { print それ } くらい. 「通し番号で探す」必然性は全くないと思うのですが....

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

えぇと, どのようにやって「できなかった」のかよくわかりませんが, 正規表現で書くのが普通かな. 例えば one-liner で perl -ne 'print if m!/08/01/!' とか. split + eq でもいいけど.

edct1
質問者

補足

ご回答有難うございます。 「できなかった」の内容なのですが ↓こうすれば8/1のみを表示することが出来ます。 foreach my $diary (reverse@file) { my ($day,$date,$year,$month,$subject,$descrip,$mynum) = split(/,/, $diary);   if($diary =~/'302'/){     print qq|$date $subject<br>$descrip<br><br>\n|;   } } ↓でも、この表現ではできません。   if($diary =~/'$mynum'/){ (日記の通しナンバーはすべてに振られてあるので、全部の日記が表示されてしまいます。) ↓$mynumの値を○○の部分に代入する事ができないんです。   if($diary =~/'○○'/){ cgiの後ろに「diary.cgi?mode=main&action=view&YMD=20090801&w=1」等をつけて表示する方法は、検索しても本を調べてもやり方が書かれておらず、関係ありそうな部分を抜き出して「1ページにいくつ表示するか&html部分&次ページへのリンク等」組み込んでみましたがダメで、行き詰ってしまいました。 日記なので、プログラムに直接日付などを書かずに表示がしたいのですが、どのように勉強すればいいのかも分からなくなってしまいました。

関連するQ&A

  • 無料日記について

    無料日記サービスで以下の条件にあう物をご存知でしたら教えて下さい。 目次のようなページに各日のタイトルが表示されるような物。 (日記本文がダーッと表示されずワンクッションほしいので。「エンピツ」というサービスもような感じで) できれば1日の文字制限が1000字以上のもの。 アイコンやデザインは可愛くなくてもいいです。シンプルな方がいいです。 宜しくお願いします。

  • フォルダ内の最新ログの取り出し方

    log(フォルダ) ┣200907.txt ┣200906.txt ┣200905.txt ┗num.txt 日記のログなのですが、logフォルダの中には上記のようなデータが有り、現在はファイルを開くとき下記のプログラムで開いています。 open(FILE, './log/200907.txt') or die "$!\n"; my @file = <FILE>; close(FILE); これを、新しい月の「200908.txt」が作成されたとき、自動的に「200907.txt」→「200908.txt」に更新する方法を教えていただけないでしょうか? あと、この日記は記事毎にNo.が割り振られており「num.txt」には、最新ナンバー数字のみ記録されてます。

    • ベストアンサー
    • Perl
  • 日記帳・10年日記

    最近 5年日記か10年日記をつけようかなと思い、どちらにしようか迷っています。 ただ、日付入りのものだともう4月過ぎだし3ヶ月程白紙になってしまうので、我慢して来年から始めるか、それとも日付なしのものを購入して 近いうちに始めるか 、ちょっと迷っています。 もし5年日記や10年日記をつけている方がいたら、日付入りのものと日付なしのもの どちらが良いとか、5年日記 10年日記 どちらがおすすめとか あれば教えて頂きたいです。 あまりキャラクターものもないし、見た目はどれもあまり変わらないため、5年 10年どちらがいいか、日付のありなし等、使い勝手の良し悪しがあればお聞きしたいなと思い質問しました。 よろしくお願いします。

  • MySQLで日記を作成

    MySQLのDBに簡単な日記を保存したいのですが、 データのレコード方法のアドバイスをお願いします。 記録する項目は、日付、題名、本文としたときを想定します。 DBに既に8/1の日記、8/3の日記、という順にデータがレコードされているとします。 今、8/2の日記をレコードしようとします。 このときの考えられる記録の処理で、 1.DBの末尾に8/2のデータを記録する。  出力の際に、日付でソートする。 2.DBに既に登録してあるデータを日付でソートし、8/1、8/2、8/3の順で記録する。  出力はデータの順番通り。 どっちの方がスマートでしょうか。 アドバイス、お願いします。

    • ベストアンサー
    • MySQL
  • [Word]条件により表示・非表示を切り替えたい

     ご覧いただきありがとうございます。Wordで、下記のように「日付が入力 されていなかったら(案)と表示する」ということはできるでしょうか。  ご存じの方、よろしくご教示お願いいたします。 ************************************************       (案)←表示する               平成 年 月 日          (日付が入力されていない↑)        ・        ・       (本文) ************************************************           ←なにも表示しない               平成18年11月19日           (日付が入力されている↑)        ・        ・       (本文) ************************************************

  • FC2のブログで日記の日付表示を日記の初めにしたい

    FC2のブログで日記の日付表示を日記の初めにしたいのですが、どうすればいいか教えていただけますか? 今はその日の文章の最後に日付、コメント数などが表示されます。 ブログ初心者のため、わかりやすく説明していただけるとありがたいです。 よろしくお願いします。

  • 日付28日、30日、31日、月ごとに自動表示させたい。

    日付28日、30日、31日、月ごとに自動表示させたい。 1、月によって28日、30日、31日と自動表示させたいです。 2、(添付画像:カレンダー)「D2」1日を基準に 「年」「日付」「曜日」「祝日」を自動表示とセルに条件つき書式を使って 色を付けたのですが、その下のセルにも月が変わるごと自動で色をつけたいです。 名前(1番~15番)の列(日付、曜日、祝日)です。 上記の2点教えて下さい。 よろしくお願いします。

  • メモソフト、もしくは日記ソフトを探しています。

    メモソフト、もしくは日記ソフトを探しています。 欲しい機能は ・オフラインで使える ・検索機能がある ・過去の日付(2001年など)を楽に入力でき、日付順に並ぶ ・1ヶ月分のタイトルだけ表示などの機能がある ・カテゴリ分け、複数タグを付けられる。 ・できればフリーソフト 機能的にはブログにパスワードをつけてプライベートで使うのが 一番あっているのかもしれませんが、重いので ローカルで使えるソフトがあれば教えて下さい。 よろしくお願いします。

  • テーブルの表示制限?

    日記サイトを作っています。 PHP+MySQLで投稿から表示まで出来たので こんどはデザイン面を作ろうと思っています。 日記の内容が増えてくると見るほうも面倒になると思うので タイトルと日付だけを表示させて「続きを読む」ボタンを押すとズラっと本文が表示される。 というような方法をとりたいのですが たとえばタイトル、本文、日付の項目でテーブルを作って ボタンがクリックされたときに本文を表示する。 というのはJavascriptで可能でしょうか? Dreamweaverの体験版を使ってみたのですが、WEBページ上に配置されている記事を 見ている人が自由に配置変更できる「レイヤーのドラッグ」 という機能があったのできっと今回のような処理も Javascriptでできるのでは?とおもって質問することにしました。 アドバイスよろしくおねがいします。

  • 過去ログ、タイトル一覧はつけられないの?

    シーサーブログを利用しているのですが、 ○○年××月の過去ログを一覧表にして表示させたいのです。 ○○年××月をクリックすると、 ○○年××月に書いた日記すべての 日付と「タイトル」を表示させたいのです。 が、できるのかどうかすら、わかりません。 どなたか、教えていただけませんか? よろしくお願いします。

専門家に質問してみよう