テキストの行が特定の文字の場合に置換する
テキスト文章で、ある行が特定の文字列だった場合に、別の文字に置き換える処理を行ってみたいと思います
たとえば、テキスト文章からHTMLファイルを作成する時に、複雑なテーブルを多用すると頭が混乱してきてイライラしてきますよね(私だけか?)
複雑なHTMLを特定のキーワードに置き換えておいて、perl で一度に置き換える方法について考えてみたいと思います
まず初めに実験となるテキストファイルを作成します
$ cat a.txt
aaa
bbb
ccc
ddd
<start>
eee
fff
ggg
<end>
hhh
iii
|
このテキストファイルの<start>と<end>の行を特定の文字列の行に置換してみたいと思います
test.pl という名前で以下のプログラムを保存しました
$map{"<start>"}="+++++++\nstartです\n+++++++\n";
$map{"<end>"}="-------\nendです\n-------\n";
while($line=<>){
$line =~ s/\r//; #改行を削除する
$line =~ s/\n//; #改行を削除する
if($map{$line}){
print $map{$line};
}else{
print "$line\n";
}
}
上記プログラムを実行
$ cat a.txt | perl test.pl
aaa
bbb
ccc
ddd
+++++++
startです
+++++++
eee
fff
ggg
-------
endです
-------
hhh
iii
|
<start>と<end>が別の文字列の行に置き換えられているのが確認できます
■HTMLファイルを作成する
HTMLファイルとして作成したいイメージ
テーブルを3つヨコに並べて真ん中のテーブルを大きくしてに文字を表示する。
その中に任意のテーブル数を立て向きに配置して文章を表示する。
+--------------------+
| | TITLE | |
| | +----------+ | |
| | |aaa | | |
| | |bbb | | |
| | +----------+ | |
| | +----------+ | |
| | |ccc | | |
| | |ddd | | |
| | +----------+ | |
+--------------------+
▼作成したいイメージのHTMLに必要と思われるキーワードを抜き出し、
上記で作成したプログラムのマップ部分に追加しました
ファイルの行のキーワード ( <START> ) などを目的の文字列 ( <html> ) などに変換します
$map{"<MAIN TEXT START>"}="<!-- MAIN TEXT START -->\n<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<tr>\n<td width=\"10%\" valign=\"top\"></td>\n<td width=\"80%\" valign=\"top\">\n<br>\n";
$map{"<TEXT START>"}="<table width=\"100%\" bgcolor=\"#FFFFFF\">\n<td BGCOLOR=\"#FFFFFF\" >\n";
$map{"<TEXT END>"}="</td>\n</table>\n";
$map{"<BOX START>"}="<table>\n<td BGCOLOR=\"#FFDDDD\" >\n";
$map{"<BOX END>"}="</td>\n</table>\n";
$map{"<MAIN TEXT END>"}="</td>\n<td width=\"10%\" valign=\"top\"></td>\n</tr>\n</table>\n";
$map{"<START>"}="<html>\n";
$map{"<END>"}="<td width=\"10%\" valign=\"right\"></td></table>\n";
while($line=<>){
$line =~ s/\r//; #改行を削除する
$line =~ s/\n//; #改行を削除する
if($map{$line}){
print $map{$line};
}else{
print "$line\n";
}
}
▼変換元となるテキストファイルの作成
a.txt として保存しました
<START>
<body bgcolor="#00ffff">
<MAIN TEXT START>
<center>タイトル</center><br>
<TEXT START>
aaa<br>
bbb<br>
ccc<br>
<TEXT END>
<br>
<TEXT START>
<BOX START>
aaaa<br>
bbbb<br>
<BOX END>
cccccccc<br>
<TEXT END>
<END>
▼プログラムを実行して、出力結果の a.html ファイルをブラウザで開きました
$ cat a.txt | perl test.pl > a.html
|
形が決まっているHTMLファイルを作成する時に便利そうです
20061014 作成
▲トップページ
>
perl 関連