プログラミング: 2008年6月アーカイブ
以前にもブログで書いたRubyでHTMLファイル作成ですが、さらに改良しExcelの1行を1つのHTMLファイルに変換するプログラムを書きました。さらに、前回同様HTMLテンプレート機能も使用しています。Excelデータはタブ区切りテキストにします。
※プログラムはクリエイティブコモンズです。
YAMLも使ってみました。詳細は以下を参照。
config.yamlは以下の通り。
data.txtにタブ区切りテキストです。1行目のheader行の項目名をテンプレートファイル(template.rhtml)に設定すると項目が書く行の設定値でHTML生成します。また、1行目のid項目は必須でその項目値がHTMLファイル名になります。
※プログラムはクリエイティブコモンズです。
#!/usr/bin/ruby -Ks
require 'erb'
require 'yaml'
include ERB::Util
$KCODE = 's'
class CreateHtml
def initialize
@config = YAML.load_file("config.yaml")
@erb = ERB.new(File.read(@config[:template]), nil, "-")
end
def generate
objs = input
for obj in objs do
output(obj)
end
end
def input
objs = Array.new
count = 0
open(@config[:data]).each{|input|
if count == 0
@headers = input.split
count = 1
next
end
h = Hash.new
arr = input.split
@headers.size.times{|i|
h.store(@headers[i], arr[i])
}
objs.push(h)
}
return objs
end
def output(o)
open(@config[:output]+"/"+o['id']+".html", "w"){ |output|
output.write(@erb.result(binding()))
}
end
end
obj = CreateHtml.new
obj.generate
YAMLも使ってみました。詳細は以下を参照。
config.yamlは以下の通り。
:template: template.rhtml :data: data.txt :output: output
data.txtにタブ区切りテキストです。1行目のheader行の項目名をテンプレートファイル(template.rhtml)に設定すると項目が書く行の設定値でHTML生成します。また、1行目のid項目は必須でその項目値がHTMLファイル名になります。
あるディレクトリにあるログファイルのなかからエラー情報を抜き出し、指定したメールに送信するというプログラムを書きました。cron登録して毎日エラーチェックしています。サーバの都合上、Perl5.8.0でCPANは使用できず。Linux、EUC環境でログファイルはShift-JISという環境で動作しています。メールはsendmailを使用しています。
1度チェックしたファイルはbackupディレクトリに移動し、2度はチェックしないようになっています。
ソースはクリエイティブコモンズでお願いします。
1度チェックしたファイルはbackupディレクトリに移動し、2度はチェックしないようになっています。
ソースはクリエイティブコモンズでお願いします。
#!/usr/bin/perl
use strict;
use File::Copy;
require "mimew.pl";
require "jcode.pl";
my $ERROR_DIR = '/var/log/error';
my $BACK_UP = '/var/log/error/backup';
opendir(DIR, $ERROR_DIR) or die;
foreach (readdir(DIR)){
my $file = $_;
my $error = "";
next if $file =~ /^\./ ;
next if $file =~ /backup/ ;
open(FILE, $ERROR_DIR."/".$file ) or die;
foreach (){
$error .= $_ unless $_ =~ /,0,0,/;
}
close(FILE);
print $file."\n";
jcode::convert(\$error, 'euc', 'sjis');
if ( length($error) > 1 ){
sendmail($file, $error)
}
move $ERROR_DIR."/".$file, $BACK_UP."/".$file or die "move Error. $!";
}
closedir(DIR);
sub sendmail(){
my @arg = @_;
my $sendmail = '/usr/lib/sendmail';
my $to = "to\@example.com";
my $from = "from\@example.com";
my $subject = @arg[0];
my $body = @arg[1];
jcode::convert(\$body,'jis', 'euc');
jcode::convert(\$subject,'jis', 'euc');
$subject = mimeencode($subject);
open(MAIL,"| $sendmail -t");
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "\n";
print MAIL "$body\n";
close(MAIL);
}

