PERL

LINK
PERL-IT
PERL TUTORIAL
PERL DOC

SOFTWARE
ActivePerl-5.8.2.808-MSWin32-x86.msi : Ti installa il PERL in ambiente Windows
Wbin : Istruzioni Unix sotto Windows
Komodo : Editor Perl che ha la funzionalità dell'anteprima di ricerca per espressioni regolari.


EXAMPLE - ESEMPI PARSING ESPRESSIONI REGOLARI
SOSTITUZIONE AVANZATA: perl -pi.bak -e "s/(EXPREG)(EXPREG)(EXPREG)/sprintf ($1.'TEXT'.$3)/eg" file.txt
SOSTITUZIONE AVANZATA SU ULTRAEDIT:perl -pi.bak -e "s/([A-Z]+)_([A-Z]+)/sprintf($2.'-'.$1)/eg" %N%E
Note Perl
SCRIPT N.1 (.pl) - Parsing di file presenti nella directory salvando tutti in un file Excel
SCRIPT N.2 (.pl) - Scarica una pagina da un sito usando wget e ne fa il parsing salvando tutti in un file Excel
SCRIPT N.3 (.pl) - Scarica dal web una pagina usando get e ne fa un parsing salvando tutti in un file Excel
SCRIPT N.4 (.pl) - Parsing su email presenti nella directory salvando tutti in un file Html

SCRIPT N.1 - Parsing di file presenti nella directory salvando tutti in un file Excel
$out_file = "output.xls";
open (OUT, ">$out_file") or die "Can't open $out_file: $!\n";
print OUT "TITOLO\tDI\tCON\tGENERE\tPAESE\tANNO";

opendir(DIR,".");
   @a = readdir(DIR);
   closedir(DIR);
   for (@a) {
     if ($_ =~ /htm/) {

            $in_file = "$_";

            open (IN, "<$in_file") or die "Can't open $in_file: $!\n";

            $count = 1;

            while ( $line =  ) {
            	#if ($count > 780 && $count < 1290){
				if ($count > 200 && $count < 1500){
				  if ($line =~ /(.*?)<\/b>/) {    # TITOLO
                	print OUT "\n$1\t$2";
					$flagcon  = "\t";
                  }
				  if ($line =~ /tppabs="http:\/\/www\.asp\?id=(.*?)"\sclass="linkBLU">(.*?)<\/b>/) {    # TITOLO
                	print OUT "\n$1\t$2";
					$flagcon  = "\t";
                  }
            	  if ( $line =~ /^\t{8}di\s(.*?)
/ ) { # DI $di = $1; $di =~ s///g; $di =~ s/<\/a>//g; $di =~ s/\.$//g; print OUT "\t$di"; } if ( $line =~ /^\t{9}Con\s(.*?)
/ ) { # CON $con = $1; $con =~ s///g; $con =~ s/<\/a>//g; print OUT "\t$con"; $flagcon = "" } # GENERE, PAESE, ANNO #if ( ($next =~ /YES/) && ($line =~ /(.*?),\s(.*?) (.*?)<\/A>/) ) { if ($line =~ /(.*?),\s(.*?) (.*?)<\/A>/) { $genere = $1; $paese = $2; $anno = $3; $genere =~ s/^\s*/ /; print OUT "$flagcon\t$genere\t$paese\t$anno"; } } $count++; } close IN; } } close OUT;

SCRIPT N.2 - Scarica una pagina da un sito usando wget di unix (quindi bisogna averla) e ne fa il parsing salvando tutti in un file Excel
open (OUT, ">>rec.xls") or die "Can't open $out_file: $!\n";
print OUT "CODICE\tTITOLO\tTITOLO ORIGINALE\tCOLORE\tDURATA\tRECENSIONE\tPATH IMG\n";

for ($i = 35439; $i < 35440	; ++$i)	{
    system "wget -O tmp.txt http://www.....asp?id=$i";

#    open (IN, "tmp$i.txt") or die "Can't open $in_file: $!\n";
    open (IN, "tmp.txt") or die "Can't open $in_file: $!\n";
    
    $next = "";
    $path = "";
    while ( ($line = ) && ($next !~ /NO/) ) {
        if ( $line =~ /(.*?)<\/ti.*?>/ ) {   # TITOLO
            $titolo = $1;
            $titolo =~ s/\s\(.*?\)//;
            print OUT "\n$i\t$titolo";
			$titori = "\t";
        }
        if ( $line =~ /\((.*?)\)<\/b>/ ) {        # TITOLO ORIGINALE
            $orig = $1;
            print OUT "\t$orig";
			$titori = "";
        }
        if ( $line =~ /,\s(.*?),\s(.*?)\smin\./ ) { # COLORE/BW, MIN
            print OUT "$titori\t$1\t$2";
        }
        if ( $line =~ /(filmclub\/.*?\/.*?\/.*?\/imm.jpg)"/ ) { # IMG
            $path = $1;
        }
        if ( $next =~ /YES/ ) {                     # RECENSIONE
            $next = "NO";        #ultima
            $line =~ s/<.*?>//g;
            $line =~ s/\n//g;
            print OUT "\t$line\t$path";
        }
        if ( $line =~ // ) {
            $next = "YES";
        }
    
    }
    
    close IN;
}
close OUT;


SCRIPT N.3 - Scarica dal web una pagina usando get e ne fa un parsing salvando tutti in un file Excel
open (OUT, ">>file.it.xls") or die "Can't open $out_file: $!\n";
print OUT "Codice\tTitolo Film\tAnno\tTitolo originale\tAltri titoli\tDurata\tVietato\tOrigine\tColore\tGenere\tFormato\tTratto da\tProduzione\tDistribuzione\tRegia\tAttori\tSoggetto\tSceneggiatura\tFotografia\tMusiche\tMontaggio\tScenografia\tEffetti\tCostumi\tTrama\tCritica\tNote";

# USATA PER DOWNLOAD GET
use LWP::Simple;
$|=1;
#45171
for ($i = 1; $i <45172; ++$i)
	{
	# INIZIALIZZAZIONE
	$Titolo_Film= "";
	$Anno= "";
	$Titolo_originale= "";
	$Altri_titoli= "";
	$Durata= "";
	$Vietato= "";
	$Origine= "";
	$Colore= "";
	$Genere= "";
	$Formato= "";
	$Tratto_da= "";
	$Produzione= "";
	$Distribuzione= "";
	$Regia= "";
	$Attori= "";
	$Soggetto= "";
	$Sceneggiatura= "";
	$Fotografia= "";
	$Musiche= "";
	$Montaggio= "";
	$Scenografia= "";
	$Effetti= "";
	$Costumi= "";
	$Trama= "";
	@tmpTrama= "";
	$Critica= "";
	@tmpCritica ="";
	$Note= "";
	@tmpNote="";
	
	# DOWNLOAD PAGINA
	$tmpfile = get ("http://www.....asp?s=$i");
	
	# PARSERING PAGINA
	if ($tmpfile =~ /\t{6}.*?Titolo Film.*?(.*?)(.*?)(.*?)(.*?)(.*?)(.*?)(.*?)(.*?)(.*?)(.*?)(.*?)(.*?)(.*?)(.*?)<\/font>/s)
		{$tmpRegia = $1;
		while($tmpRegia=~ /(?:(.*?)<\/a>)|(?:(?: ){6}(\w.*?)
)/g) {if ($1) {$Regiat =$1;} else {$Regiat =$2;} $Regiat =~ s/  / /; $Regia = $Regia.", ".$Regiat; } $Regia=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Attori.*?(.*?)<\/font>/s) {$tmpAttori = $1; while($tmpAttori=~ /(?:(.*?)<\/a>)|(?:(?: ){6}(\w.*?)
)/g) {if ($1) {$Attore =$1;} else {$Attore =$2;} $Attore =~ s/  / /; $Attori = $Attori.", ".$Attore; } $Attori=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Soggetto.*?(.*?)<\/font>/s) {$tmpSoggetto = $1; while($tmpSoggetto=~ /(?:(.*?)<\/a>)|(?:(?: ){6}(\w.*?)
)/g) {if ($1) {$Soggettot =$1;} else {$Soggettot =$2;} $Soggettot =~ s/  / /; $Soggetto = $Soggetto.", ".$Soggettot; } $Soggetto=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Sceneggiatura.*?(.*?)<\/font>/s) {$tmpSceneggiatura = $1; while($tmpSceneggiatura=~ /(?:(.*?)<\/a>)|(?:(?: ){6}(\w.*?)
)/g) {if ($1) {$Sceneggiaturat =$1;} else {$Sceneggiaturat =$2;} $Sceneggiaturat =~ s/  / /; $Sceneggiatura = $Sceneggiatura.", ".$Sceneggiaturat; } $Sceneggiatura=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Fotografia.*?(.*?)<\/font>/s) {$tmpFotografia = $1; while($tmpFotografia=~ /(?:(.*?)<\/a>)|(?:(?: ){6}(\w.*?)
)/g) {if ($1) {$Fotografiat =$1;} else {$Fotografiat =$2;} $Fotografiat =~ s/  / /; $Fotografia = $Fotografia.", ".$Fotografiat; } $Fotografia=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Musiche.*?(.*?)<\/font>/s) {$tmpMusiche = $1; while($tmpMusiche=~ /(?:(.*?)<\/a>)|(?:(?: ){6}(\w.*?)
)/g) {if ($1) {$Musichet =$1;} else {$Musichet =$2;} $Musichet =~ s/  / /; $Musiche = $Musiche.", ".$Musichet; } $Musiche=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Montaggio.*?(.*?)<\/font>/s) {$tmpMontaggio = $1; while($tmpMontaggio=~ /(?:(.*?)<\/a>)|(?:(?: ){6}(\w.*?)
)/g) {if ($1) {$Montaggiot =$1;} else {$Montaggiot =$2;} $Montaggiot =~ s/  / /; $Montaggio = $Montaggio.", ".$Montaggiot; } $Montaggio=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Scenografia.*?(.*?)<\/font>/s) {$tmpScenografia = $1; while($tmpScenografia=~ /(?:(.*?)<\/a>)|(?:(?: ){6}(\w.*?)
)/g) {if ($1) {$Scenografiat =$1;} else {$Scenografiat =$2;} $Scenografiat =~ s/  / /; $Scenografia = $Scenografia.", ".$Scenografiat; } $Scenografia=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Effetti.*?(.*?)<\/font>/s) {$tmpEffetti = $1; while($tmpEffetti=~ /(?:(.*?)<\/a>)|(?:(?: ){6}(\w.*?)
)/g) {if ($1) {$Effettit =$1;} else {$Effettit =$2;} $Effettit =~ s/  / /; $Effetti = $Effetti.", ".$Effettit; } $Scenografia=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Costumi.*?(.*?)<\/font>/s) {$tmpCostumi = $1; while($tmpCostumi=~ /(?:(.*?)<\/a>)|(?:(?: ){6}(\w.*?)
)/g) {if ($1) {$Costumit =$1;} else {$Costumit =$2;} $Costumit =~ s/  / /; $Costumi = $Costumi.", ".$Costumit; } $Costumi=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Trama.*?(.*?)\X/s) #mettere un < al posto di X {@tmpTrama = $1; foreach $Tramat (@tmpTrama) { $Tramat=~ s/[^a-zA-Z0-9.,éèòàùì\/!?+\{\}\[\]:;'"()-]/ /g; $Trama=$Trama.", ".$Tramat } $Trama=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Critica.*?(.*?)\X/s) #mettere un < al posto di X {@tmpCritica = $1; foreach $Criticat (@tmpCritica) { $Criticat=~ s/[^a-zA-Z0-9.,éèòàùì\/!?+\{\}\[\]:;'"()-]/ /g; $Critica=$Critica.", ".$Criticat } $Critica=~ s/^,\s//; } if ($tmpfile =~ /\t{6}.*?Note.*?(.*?)\X/s) #mettere un < al posto di X {@tmpNote = $1; foreach $Notet (@tmpNote) { $Notet=~ s/[^a-zA-Z0-9.,éèòàùì\/!?+\{\}\[\]:;'"()-]/ /g; $Note=$Note.", ".$Notet } $Note=~ s/^,\s//; } # CREAZIONE DB EXCEL print "\n$i"; print OUT "\n$i"; print OUT "\t$Titolo_Film"; print OUT "\t$Anno"; print OUT "\t$Titolo_originale"; print OUT "\t$Altri_titoli"; print OUT "\t$Durata"; print OUT "\t$Vietato"; print OUT "\t$Origine"; print OUT "\t$Colore"; print OUT "\t$Genere"; print OUT "\t$Formato"; print OUT "\t$Tratto_da"; print OUT "\t$Produzione"; print OUT "\t$Distribuzione"; print OUT "\t$Regia"; print OUT "\t$Attori"; print OUT "\t$Soggetto"; print OUT "\t$Sceneggiatura"; print OUT "\t$Fotografia"; print OUT "\t$Musiche"; print OUT "\t$Montaggio"; print OUT "\t$Scenografia"; print OUT "\t$Effetti"; print OUT "\t$Costumi"; print OUT "\t$Trama"; print OUT "\t$Critica"; print OUT "\t$Note "; } close OUT;