2012-04-25 9 views
1

私は約800のhtmlファイルのディレクトリを持っています。私は各ファイルを検索し、タグ間でテキストを返そうとしています。次に、そのテキストを含むディレクトリを作成し、そこにファイルを移動(またはコピー)します。これは思ったときにはかなり簡単な努力のようでしたが、私はこれに必要なモジュールを特定することさえ問題があります。私はFile :: Findとglobを見てきましたが、ファイル名ではなくtxtの正規表現をどのように実装するのかは正確には分かりません。私は基本的にはperlの初心者ですので、感謝する。前もって感謝します。Perlでの検索、作成、移動

EDIT は明確にする:

読むディレクトリ=〜/私/プロジェクト/〜/私/プロジェクト/すべてのファイルを見つける=〜/.html$については

を:私が達成しようとしていますどのような/ Iファイルごと

は、=のdivクラス= "レシプ" ID = "objectTo">のHTMLを検索する(。*)/ divのすべてのために

(。*)IE [email protected]かJohn Doeは同じ名前のディレクトリを作成します

[email protected]またはJohn Doeのインスタンスを持つすべてのファイルをループして対応するディレクトリに移動します。

私は本当に助けに感謝します!

+0

コードは、移動またはコピーされたファイルの名前をどのように決定する必要がありますか? –

+0

をスカラーを介して送信する。私の最初の考えは$ html =〜m {(。*) rar

+0

あなたの質問を編集して、移動またはコピーされたファイル名の決定に使用したいHTMLの例を*簡潔にしてください。コードはどのように「From」値を釣り上げるべきですか?弊社はお客様の問題に完全に精通しておらず、有用な提案をするために特定の情報が必要であることを忘れないでください。 –

答えて

2

File :: Findで正しい軌道に乗っています。

あなたは 'wanted()'関数を作成し、その関数内で見つかったファイルの名前は$File::Find::nameになります。それを使って、ファイルハンドルを開いたり、ファイルを読み込んだり、タグを探したり、探しているデータを抽出したり、ファイルハンドルを閉じることができます。 File :: Findは次のファイルに移動します。

#! /usr/bin/perl 

use warnings; 
use strict; 
use File::Find; 

sub wanted { 
    my $file=$File::Find::name; 

    # if the file has the extension '.html' (case insensitive) ... 
    if($file =~ /\.html$/i) { 
     my $FH; 
     open($FH, '<', $file) or die "Could not open '$file' for reading: $!"; 
     local $/ = ''; 
     my $contents = <$FH>; # slurp file into $contents 
     # search $contents for the tags that you're looking for, 
     # 
     close $FH; 
    } 
} 

my @directories = (
     './htmlfiles' 
    , './www' 
    , './web' 
); 

find(\&wanted, @directories); 

警告:コードはperl -cを渡しますが、実行していません。

0

質問の2番目の部分については、HTML::StripでテキストからHTMLマークアップを取り除いてください。

+0

[HTML :: Restrict](https://metacpan.org/module/HTML::Restrict)を使用してマークアップを削除することもできます。 – oalders

+0

誰がストリッピングについて何を言ったのですか?質問に添付されているコメントは、[Rar](http://stackoverflow.com/users/1316130/rar)のように、DOMの特定の場所でテキストを選択的に取得しようとするもので、[Web :: Query]( http://p3rl.org/Web::Query)と[HTML :: TreeBuilder :: XPath](http://p3rl.org/HTML::TreeBuilder::XPath)が適しています。いったんマークアップがなくなれば、これはむしろ難しいことです。 – daxim

+0

daximを明確にしてくれてありがとう。それはまさに正しいことです。私はhtmlファイルをそのまま残しておき、正規表現がonであればマークアップを削除する必要があるとは思わない。私は、作成するディレクトリ名として使用したいテキストを識別するためにタグを使用しています。 – rar

関連する問題