2012-04-25 3 views
1

약 800 개의 html 파일 디렉토리가 있습니다. 각 파일을 검색하고 태그 사이에 텍스트를 반환하려고합니다. 그런 다음 해당 텍스트가 포함 된 디렉토리를 만들고 여기에 파일을 이동 (또는 복사)하려고합니다. 이것은 생각해봤을 때 꽤 쉬운 노력처럼 보였지만 필요한 모듈을 확인하는 데에도 많은 문제가 있습니다. File :: Find 및 glob, 쳐다 보았지만 파일 내에서 txt 정규식으로 구현하는 방법에 대해 정확히 모르겠습니다. (기본적으로 파일 이름이 아닙니다.) 나는 기본적으로 초보자이므로 모든 도움을 줄 것입니다. 감사하겠습니다. 미리 감사드립니다.Perl에서 검색, 생성 및 이동

편집 는 명확히하기 :

읽기 디렉토리 = ~/나/프로젝트/~/나/프로젝트/모든 파일을 찾을 수 = ~ /.html$를 들어

을 : 나는 달성하기 위해 노력하고 무엇/I 각 파일

가 = DIV 클래스 = "RECIP"ID = "objectTo"> HTML 용 검색. (*)/DIV 모든 내용

. (*) 또는 IE [email protected] John Doe는 같은 이름의 디렉토리를 만듭니다.

[email protected] 또는 John Doe 인스턴스가있는 모든 파일을 해당 디렉토리로 되돌려 이동합니다.

정말 도움을 주셔서 감사합니다!

+0

코드가 이동되거나 복사 된 파일의 이름을 어떻게 결정해야합니까? –

+0

스칼라를 통해. 내 초기 생각은 $ html = ~ m { (. *) rar

+0

이동하거나 복사 한 파일 이름을 결정할 때 사용할 HTML의 * brief * 예제를 제공하도록 질문을 편집하십시오. 코드가 어떻게 "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

질문의 두 번째 부분은 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 파일을 그대로 원하고 내 정규식이 내가 뭘 일치하는지에 대한 onpoint 인 한 마크 업을 제거해야한다고 생각지 않는다.나는 내가 만들 디렉토리 이름으로 사용할 텍스트를 식별하기 위해 태그를 사용하고 있습니다. – rar