1

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

編集明確にするために:私が達成しようとしていること:

ディレクトリの読み取り=〜/ me / project /

〜/ me / project /の場合、すべてのファイルを検索します=〜/.html$/i

ファイルごとに、htmlで= div class = "recip" id = "objectTo">(。*)/divを検索します

すべての(。*)IEjohn@doewww.comまたはJohnDoeに対して、同じ名前のディレクトリを作成します

ループバックして、xxx​​xxxxx@xxxxx.comまたはJohnDoeのインスタンスを持つすべてのファイルを対応するディレクトリに移動します。

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

4

2 に答える 2

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しますが、実行していません。

于 2012-04-25T17:20:23.450 に答える
0

質問の2番目の部分については、テキストからHTMLマークアップを削除するためのHTML::Stripを確認してください。

于 2012-04-25T19:19:09.327 に答える