• 締切済み

Perlでファイルを読み込みタグを削除する方法

以下のようなソースを書きました。 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;

みんなの回答

  • gorusura
  • ベストアンサー率59% (25/42)
回答No.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"; とすると、二倍ぐらいのメモリを使うので、ご注意。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

> 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」*だ*け*にはならない。 → 改行文字をそのままにするのか、削除するのか、別な文字に置き換えるのか、目的によって方針を決める

dai_gokuh
質問者

補足

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

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

最初の1行しか出ないのは、1行表示した直後にclose(OUTB)でファイルを閉じてしまっているからですね。 それと、CGIでやるなら、排他処理とか考えておいた方がよくないですか?flock使うとか

dai_gokuh
質問者

補足

例えば、 <!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 という文字だけにしたいのです。 宜しくお願いします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

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

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

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

dai_gokuh
質問者

補足

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

関連するQ&A