Re: separare un file di testo
On Fri, 17 Jun 2005 13:50:16 +0200 Fernando Figaroli wrote:
> ho un file ... di testo unico .. che è stato creato dall'unione di più
> file di testo...
>
> vorrei separarli sapendo che:
>
> 1- il testo di ogni file inizia con " e termina con " 2- il nome del file
> è la prima riga..
>
Qui sotto trovi una possibile soluzione in perl.
Legge i dati dal file "testounico.txt" e scrive nella directory corrente.
====
#!/usr/bin/perl -w
my $infile="testounico.txt"; # filename di ingresso
my $outfile=""; # filename in uscita
my $titolo=1; # =1 durante lettura titolo
my $buffer=""; # buffer testo da scrivere
my $ch; # char letto
my $new=0; # =1 durante lettura testo
my $i;
my $tmpname;
open(UNICO, $infile) or die "Non posso aprire $infile!";
while(read(UNICO,$ch,1)) {
if ($new == 0) {
if ($ch eq "\"") {
# trovata " di inizio nuovo testo
$new = 1; $buffer = ""; $outfile = ""; $titolo = 1
};
} else {
# qui stiamo all'interno di un testo
if ($ch eq "\"") {
# fine testo: ritocca il filename
$outfile =~ tr/\ \//_/;
$outfile .= ".txt";
# se $outfile esiste gia, prova ad appendere .1, .2 , ecc.
$tmpname = $outfile; $i=1;
while (stat($tmpname) == 1) {
$tmpname = $outfile . ".$i";
$i++;
}
$outfile = $tmpname;
$new = 0;
# scrive il file
open(OUTFILE,"> $outfile")
or die "Non posso aprire $outfile!";
print OUTFILE $buffer; close OUTFILE;
} elsif ($ch eq "\n") {
# fine titolo
$titolo = 0; $buffer .= $ch;
} else {
# accoda il prox carattere al buffer testo/titolo
$buffer .= $ch;
if ($titolo == 1) { $outfile .= $ch; }
}
}
}
close UNICO ;
====
Ciao,
Maxx
Reply to: