電子書籍の厳選無料作品が豊富!

以下のようなソースを書きました。
HTMLファイルを読み込み、タグを全て削除して他のファイルに書き込むソースです。
しかし、上手く動作しません。
問題点を教えていただけませんでしょうか。
お願いします。

#!/usr/local/bin/perl

package www3sub2;

sub main(){

open(FH, "<googlefile3_.txt");
my @file = <FH>;
close(FH);
open(OUTB,"> googlefile6.txt");
foreach(@file){
my $line = $_;
$line =~ s/<("[^"]*"|'[^']*'|[^'">])*>//g;
print OUTB "$line";
close(OUTB);
}
}

1;

A 回答 (5件)

#!/usr/local/bin/perl



package www3sub2;

sub main(){
open(FH,'<googlefile3_.txt');
my @file=<FH>;
close(FH);
$file=join '',@file;
$file=~s/<.*?>//sg;
open(OUTB,'>googlefile6.txt');
print OUTB $file;
close(OUTB);
}
1;


$a=1;
print "$a";
とすると、二倍ぐらいのメモリを使うので、ご注意。
    • good
    • 0

> my @file = <FH>;


このように読みこむと、@fileには1行を一つの要素とするリストが入ります。このとき、改行コードも一緒に読み込まれます。

> foreach(@file){
> my $line = $_;
> $line =~ s/<("[^"]*"|'[^']*'|[^'">])*>//g;
> print OUTB "$line";
> }
> close(OUTB);

それをこのように処理すると

・$line =~ は対象にする1行だけしか置換しない。よって、例にある <html lang="ja" は>が無いのでパターンにマッチせず、削除されない。
→1行ずつ処理するのではなく、joinを使うなどしてファイル全体が1つの文字列になるようにして、それに対して置換を行う

・改行文字は残る。よって、「Perlでファイルを読み込みタグを削除する方法 - Perl - 教えて!goo」*だ*け*にはならない。
→ 改行文字をそのままにするのか、削除するのか、別な文字に置き換えるのか、目的によって方針を決める

この回答への補足

ありがとうございます。
なんとか解決することができました。

補足日時:2011/02/13 08:58
    • good
    • 0

最初の1行しか出ないのは、1行表示した直後にclose(OUTB)でファイルを閉じてしまっているからですね。



それと、CGIでやるなら、排他処理とか考えておいた方がよくないですか?flock使うとか

この回答への補足

例えば、

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja"
xmlns:og="http://ogp.me/ns#"
xmlns:mixi="http://mixi-platform.com/ns#"
xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="content-language" content="ja">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="X-UA-Compatible" content="IE=emulateIE7">
<title>Perlでファイルを読み込みタグを削除する方法 - Perl - 教えて!goo</title>
・・・・・以下略・・・・・・

と書き込まれたテキストファイルを読み込んで、

Perlでファイルを読み込みタグを削除する方法 - Perl - 教えて!goo

という文字だけにしたいのです。
宜しくお願いします。

補足日時:2011/02/11 13:16
    • good
    • 0

あなたのいう「タグ」とやらはどのような形式をしているのですか? そして, どのような入力に対していかなる出力を期待しているのか,

単純な例を出してもらえませんか?
    • good
    • 0

実行方法は?


このスクリプトはmainを定義しているだけで実行していませんが。

この回答への補足

CGIフォームから文章が入力されると自動的に名詞を抜きだし、YAHOOで検索します。
その検索結果がtxtファイルに保存されます。
このプログラムはサブルーチンで、フォームに入力されると元のプログラムを通して実行されます。
実際にファイルに文章は記録されているのですが、全文記録されるか、正規表現を使ってsplitなどしようとすると全て消えてしまったり、もしくは最初の一行だけがプリントされたりします。

補足日時:2011/02/11 07:04
    • good
    • 0

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