dポイントプレゼントキャンペーン実施中!

現在、既存のショッピングカートを改造していているのですが、デフォルトでは
全ての商品データ(CSV)を読み込みソートし、表示する様になっています。

これを特定の条件に当てはまる行だけ@lineとして読み込みたいと考えています。
(例えば新製品の発売日を元に発売中のモノだけ表示など)

この場合、今の知識では一旦全て読み込んで、for文などを使ったりして行毎に
調べて行くくらいしか思いつかないのですが、何か良い処理方法は有りますか?

また、全部読み込んで出力の段階でif文などで条件分岐する方法では
スクリプトの構造上得策ではありませんでした。

説明も拙く申し訳ないですが、ご存じの方ご教授下さい。

A 回答 (1件)

readline(*filehandle)もしくは<filehandle>を再復帰構文(foreachやwhile)で読み出し、その中で、if構文でマッチさせた物のみをpush(@line,$_);などのようにしてインポートさせてやればいいのではないかと思います


詳細なデータ構体が分らないのですが、例を挙げますと、

#exp(year,month,day,hour,min,sec),
$nowTime = int(&numTime(0));
$chrSplitter = '<>';
open(ITEM,$fileName) || die 'cannot load file';
foreach(readline(*ITEM)){
#期限が現在時刻よりも前だったら、配列に挿入(ぁ、逆かも)
if(int((split(/$chrSplitter/o))[0])<=$nowTime){
push(@line,$_);
}
}
close(ITEM);

sub numTime(){
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+$_[0]);
return sprintf("%04d%02d%02d%d%02d%02d%02d",($year + $factorYear),$mon,$mday,$wday,$hour,$min,$sec);
}
#わかりにくかったらゴメンナサイ
    • good
    • 0
この回答へのお礼

回答ありがとうございます
なるほど、こういう手も有るのですね。

とりあえ一度全て@lineとして読み込んでからforeachで
条件に合うモノだけ@line2としてインポートしていたのですが、
2度手間なので、この方法を使わせていただきます。

ありがとうございました。

お礼日時:2005/06/04 09:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!