
A 回答 (3件)
- 最新から表示
- 回答順に表示
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) {
#処理
}
なんて書けば良いと思いますがどうでしょう?
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 それ
}
くらい.
「通し番号で探す」必然性は全くないと思うのですが....
No.1
- 回答日時:
えぇと, どのようにやって「できなかった」のかよくわかりませんが, 正規表現で書くのが普通かな. 例えば one-liner で
perl -ne 'print if m!/08/01/!' とか.
split + eq でもいいけど.
この回答への補足
ご回答有難うございます。
「できなかった」の内容なのですが
↓こうすれば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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel質問】 「本日の日付」から指定条件を満たす営業日経過後の日数を表示させる関数式 3 2022/06/06 23:28
- 文学 日記文学が始まったきっかけはなんですか?やはり土佐日記でしょうか。土佐日記からなぜ蜻蛉日記やその他の 1 2022/12/19 23:00
- 政治 IAEAの処理水報告書の文言「この報告書はその方針を推奨するものでも承認するものでもない」 6 2023/08/24 22:58
- WordPress(ワードプレス) 投稿記事のタイトル上部に「広告」の文字が表示される 1 2022/06/12 09:36
- WordPress(ワードプレス) Wordpressの記事URLを自由に決めたい 3 2022/06/02 12:05
- 英語 "this day"が当日か今日を表すのかの使い分け方等について 5 2023/08/08 14:29
- 国産車 CDのタイトル名が表示されない 3 2022/05/15 14:36
- 日本語 「桜が咲いた」(中立叙述) 6 2022/11/01 18:34
- gooブログ ブログの2日目が、右に偏って表記される 1 2022/06/09 02:13
- その他(ブログ) ブログの2日目が、右に偏って表記される 1 2022/06/09 02:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのstrtotimeのようなものあ...
-
ファイルデータの入れ替えにつ...
-
サマータイムの判定について
-
timeの変更
-
日付範囲をの連番と月末を取得
-
PerlからMysqlに接続してデータ...
-
Perlでテキストファイルの読み込み
-
Date::Calcの計算ミス?
-
Perlでsprintf("%02d",$month)...
-
カレンダー作成
-
日付の差分の求め方(日、分)
-
年・月・日の3つのselectメニュ...
-
更新記録CGIで「前へ」「次へ」...
-
漢民族のヒステリーと半島人の...
-
先月(YYYYMM)の生成方法
-
うるう年の出し方で
-
日記の指定日のみ表示
-
うるう年の出し方
-
perl 曜日を入れる
-
プログラムの内容
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
年月日の数値化?
-
日付の差分の求め方(日、分)
-
日齢計算プログラム
-
Perlの日付取得で月の表示がお...
-
perlでcheckboxがうまく整理で...
-
パールスクリプトのif else文に...
-
perl セレクトメニューを ↓の...
-
perl Windows 7でファイルの衝...
-
ローカルだと改行されるのに、...
-
サマータイムの判定について
-
Perlの乱数について
-
T-SQL(SQL Server2000) 月数の...
-
C言語のプログラミングについて...
-
ソースの詳細を教えてください。
-
前日の日付取得するには?
-
月見る月はこの月の月
-
Perl スクレイピング処理につ...
-
Schemeのプログラミング うる...
-
CSV読み込み時に条件に合う行(...
-
if文データの別ファイル化について
おすすめ情報