Perl-skript " gjennomgå" på nettet, granskes gjennom havet av HTML- sider for informasjon , og uunngåelig møte noen av de millioner av Adobe Acrobat PDF-filer drysset over Internett . Selv om de er klar til å skrive ut og attraktiv , fra synspunkt av en web crawler , PDF-filer er en litt hardere nøtt å knekke enn enkle, tekstbaserte HTML-sider . Heldigvis , som med mange web oppgaver , er det en Perl -modul som kan bidra til å gjøre livet enklere : CAM :: PDF. Dette programmeringsgrensesnitt , selv om det meste ment å skape og manipulere PDF-filer , har noen verktøy som gjør at skript for å søke i innholdet. Du trenger
Perl skripting miljø
CAM :: PDF Perl modul
tekst eller kode editor
PDF -fil
Vis flere instruksjoner
1
Installer CAM :: PDF. Den CPAN verktøyet gir den enkleste måten å gjøre dette - start CPAN på kommandolinjen og på spørsmål, type " install CAM :: PDF " (uten anførselstegn )
2
Åpne redaktør og . starte skriptet , legge inn følgende linjer for å starte Perl tolk og importere den nødvendige modulen :
# /usr /bin /perluse CAM :: PDF ,
Legg de neste to linjer til ! behandle kommandolinjeargumentene som brukeren vil passere i :
my $ file = shift ; min $ search = shift ;
det første argumentet som sendes til skriptet vil være navnet på en PDF . fil , og den andre , søkestrengen
3
Opprett en ny CAM :: PDF objekt ved å legge til følgende linje i manuset : en
min $ doc = CAM :: PDF - > new ( $ fil) ;
Bruke importert modulen NumPages metode for å definere den øvre grensen , lage en løkke til å behandle hver side av dokumentet : en
foreach min $ p ( (1. .. $ doc -> NumPages ( ) ) ) {
4
Innenfor loop, legge denne linjen for å få hver side av teksten i PDF -filen :
< p> min $ str = $ doc - > getPageText ( $ p ) ;
Legg neste script uttalelse å splitte sidens teksten opp i en rekke separate linjer : en
@ linjer = split ( /\\ n /, $ str ) ;
Fullfør sløyfe uttalelse ved å skrive en avsluttende brakett : en
}
5
slutt legger en annen sløyfe til skriptet til å behandle hver linje på siden og søke en kamp for brukerens søkestrengen som et regulært uttrykk . Hvis det vanlige uttrykket returnerer en kamp , skriver dette eksempelet linjen og sidetallet til stdout . I stedet for disse trykte uttalelser, bør du iverksette kode for å behandle resultatene etter behov
min $ i = 0; . Foreach $ linje ( @ linjer) { + + $ i ; if ( $ linje = ~ /$ search /) { print " \\" $ søk \\ "funnet på linje $ i fra side $ p \\ n"; print " $ linjen \\ n \\ n" } }