のみまくし日記

毎日が文化祭の前日、そんな環境っていいですよね。この日記は未来の自分へのメッセージです。

2004年07月27日 ()

4Fをハックしてみました

作りっぱなしで放置している4Fですが、最近フォームメールがなんか増えてきたので久々に使っていました。

でも、使い方忘れてた。。。ので、ハックして使い方を思い出しました。(BERO)

それはさておき、既存の4Fだと、CSVに連番ふってくれーとかいう場合に、4F module を作らないと簡単に対応できません。

csvモジュールを継承するだけなので簡単なのですが、毎回それをやるのは、ちとめんどいし、汎用的でもない。

ということで、Fileter.pmを拡張して、連番を付けられるようにしてみました。

【問い】プログラムのコード「顔文字の部分」を回答しなさい。(直すのがめどくさいので)

package FFFF::Module::Filter;
sub new {
	my $class = shift;
	
	my $self = bless {}, $class;
	
	$self->prepare(
		STR   => \&filter_STR,
		TIME  => \&filter_TIME,
		ENV   => \&filter_ENV,
		COUNT => \&filter_COUNT,
	);
	
	return $self;
}

sub filter_COUNT {
	my ($format, $countfile, $lockfile) = (shift =~ /(.+):(.+?):(.+?)/);
	
	my $count;
	# ロック
	open(LOCK, ">$lockfile");
	flock(LOCK, 2);
	
	# カウンタを増やす
	open(COUNTER, $countfile);
	$count = <COUNTER>;
	$count++;
	close(COUNTER);
	open(COUNTER, ">$countfile");
	print COUNTER $count;
	close(COUNTER);
	
	# ロック解除
	flock(LOCK, 8);
	close(LOCK);
	
	return sprintf($format, $count);
}

として、

使い方は以下

xxx.cgi
<Module CSV>
	File   {TIME:../data/howto/%Y_%m.csv}

	Header 受付日
	Header 受付時間
	Header ID
	Header お名前

	Save   {TIME:%Y/%m/%d}
	Save   {TIME:%H:%M:%S}
	Save   {COUNT:S%05d:../data/count.txt:../data/count.lock}
	Save   name
</Module>

ちと強引。。。しかも、例えば自動返信メールにCSVと同じ番号を振りたいってのには対応不可。まぁ、今回はその機能はいらないみたいなので、コレで良しとする。

あー。4F作り直したくなってきた。4F内のモジュールは Slege使えないときの簡易フレームワークとしても使えるんだよなぁー。

Perl posted by takefumi | この日記へリンク | コメント(2) | トラックバック(0)

この日記へのトラックバック

この日記へのコメント

しかし、CSVに連番なんて、Excelでやれよって感じですけどね。。 :-)

posted by miyagawa at 2008年11月20日 20時29分 #

ですよね。ま、初めから入ってると安心する心理は分からないではないけど、のではないかと。あと今回はファイルを日付ごとに分割するし。

posted by きむら at 2008年11月20日 20時29分 #