Pregunta

Necesito crear código Perl que permita contar párrafos en archivos de texto. Intenté esto y no funciona:

open(READFILE, "<$filename")
or die "could not open file \"$filename\":$!";

$paragraphs = 0;

my($c);

while($c = getc(READFILE))
{
if($C ne"\n")
{
$paragraphs++;
}
}

close(READFILE);

print("Paragraphs: $paragraphs\n");
¿Fue útil?

Solución

Si está determinando los párrafos por una línea doble (" n n"), esto lo hará:

open READFILE, "<$filename"
    or die "cannot open file `$filename' for reading: $!";
my @paragraphs;
{local $/; @paragraphs = split "\n\n", <READFILE>} # slurp-split
my $num_paragraphs = scalar @paragraphs;
__END__

De lo contrario, simplemente cambie el " n n" en el código para usar su propio separador de párrafo. Incluso puede ser una buena idea usar el patrón \n{2,}, en caso de que alguien se volviera loco en la clave Enter.

Si le preocupa el consumo de memoria, es posible que desee hacer algo como esto (perdón por el código difícil de leer):

my $num_paragraphs;
{local $/; $num_paragraphs = @{[ <READFILE> =~ /\n\n/g ]} + 1}

Aunque, si desea seguir usando su propio código, puede cambiar if($C ne"\n") a if($c eq "\n").

Otros consejos

Ver Perlfaq5: ¿Cómo puedo leer en un archivo por párrafos?

local $/ = '';  # enable paragraph mode
open my $fh, '<', $file or die "can't open $file: $!";
1 while <$fh>;
my $count = $.;

Eche un vistazo al principio de perl en el comienzo en http://www.perl.org/books/beginning-perl/. En particular, el siguiente capítulo lo ayudará: http://docs.google.com/viewer?url=http%3A%2F%2Fblob.perl.org%2FBooks%2FBeginning- Perl%2F3145_Chap06.pdf

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top