ファイル分割のサンプルスクリプト
たとえば、記事数が多くなり、サイズが大きくなったhtmlファイルがあったとします。
これを記事毎のhtmlファイルに分割したい場合、以下のサンプルが参考になると思います。
このサンプルは、perlnote.htmファイル内でのh4要素からつぎのh4要素の前までの行データ(記事データ)を各々のファイルへ出力します。
つまり、h4要素単位に分割された内容のファイルがh4要素の数分作成されるわけです。
ファイル名は、「perlnote」プラス「該当h4要素のid」プラス「.htm」とします。
また、分割ファイルにはヘッダーとフッターを付加します。
尚、ヘッダーとフッターのファイルは予め用意します。
しかし、ヘッダーのtitle要素とh1要素には、該当h4要素の内容を実行時にコピーします。
サンプルソース
use strict; # 宣言 my ($fileheadx, $fnm, $xx, $wk, $fileheader,$filefooter); # ファイル読み込みデリミタをなしにする(ファイル全体読み込みモードにする) $wk = $/; $/ = undef; # HTMLファイルヘッダー保存 open(FH, "h_perlnote.htm") || die "open err", "(h_perlnote.htm)"; $fileheader = <FH>; close(FH); # HTMLファイルフッター保存 open(FH, "f_perlnote.htm") || die "open err", "(f_perlnote.htm)"; $filefooter = <FH>; close(FH); #ファイル読み込みデリミタを普通(行単位)にする。 $/ = $wk; open (IN, "perlnote.htm") || die "open err", "(perlnote.htm)"; open (OUT, ">dmy.tmp") || die "open err", "(dmy.tmp)"; while ($xx = <IN>) { if ($xx =~ /<h4 id="(.*?)"/) { print OUT $filefooter, "\n"; close OUT; $fnm = "perlnote" . $1 . ".htm" , "\n"; # ファイル名作成 $xx =~ /<h4.*>(.*)<\/h4>/i; $wk = $1; $fileheadx = $fileheader; # title要素とh1要素には、該当h4要素の内容をコピーする。 $fileheadx =~ s/<title.*<\/title>/<title>$wk<\/title>/i; $fileheadx =~ s/<h1.*<\/h1>/<h1>$wk<\/h1>/i; open (OUT, ">$fnm") || die "open err", "($fnm)"; print OUT $fileheadx, "\n"; } print OUT $xx; } print OUT $filefooter, "\n"; close OUT; close IN;