Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Número de líneas de un fichero .txt

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mar May 13, 2008 8:09 am
ausias
Perlero Nuevo
Perlero Nuevo
Registrado: 13 May 2008
Mensajes: 4
Número de líneas de un fichero .txt Responder citando

Hola

¿Sabéis si hay alguna función de Perl que nos diga el número de líneas que tiene un fichero .txt pasado como argumento?

Por ejemplo:
Perl:
$numerolineas = numero_de_lineas('fichero.txt')


Si el fichero tuviera, por ejemplo 251 líneas, la variable $numerolineas valdría 251.

Muchas gracias Smile
Mensaje Mar May 13, 2008 8:30 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4130
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español, ausias.

No, no lo hay, por que es muy fácil hacerlo a mano:

Perl:
sub numero_de_lineas {
    my $fichero = shift;

    open my $fh, q[<], $fichero or return -1;
    my @lineas = <$fh>;
    close $fh;

    return scalar @lineas;
}


Es más... apuesto a que se puede hacer de doce formas distintas más... ¡Adelante, gente!
Mensaje Mar May 13, 2008 8:48 am
ausias
Perlero Nuevo
Perlero Nuevo
Registrado: 13 May 2008
Mensajes: 4
Responder citando

Hola.
En primer lugar muchísimas gracias por la respuesta. Lo que no entiendo bien la tercera línea open my $fh, q[<], $fichero or return -1; ¿Me la podrían explicar en un momento?

Gracias Smile
Mensaje Mar May 13, 2008 8:52 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4130
Ubicación: Valladolid, España
Responder citando

ausias escribió:
Lo que no entiendo bien la tercera línea open my $fh, q[<], $fichero or return -1; ¿Me la podrían explicar en un momento?

Pues... abrir (open) el $fichero en modo lectura (q[<]) o salimos de la subrutina con un '-1'.
Mensaje Mar May 13, 2008 9:24 am
ausias
Perlero Nuevo
Perlero Nuevo
Registrado: 13 May 2008
Mensajes: 4
Responder citando

En realidad quiero complementar mi función print_LOG, haciendo que, además de imprimir el argumento que se le pase, actualice una variable global que cuenta el número de líneas que va imprimiendo.
Para ello haría algo como:
Perl:
#!/bin/perl
our $lines;

sub print_LOG() {
  my $message = shift;
  print $message;
  while ($message contenga "\n") {
    $message=$message - "\n";
    $lines++;
  }
}

print_LOG("missatget\n");
print_LOG("lalalalala");
print_LOG("tururú\n\n\n");


El valor del $lines llegado a este punto debería ser 4.

¿Sabéis cómo podría implementar:?
Perl:
  while ($message contenga "\n") {
    $message=$message - "\n";


Muchas gracias
Mensaje Mar May 13, 2008 9:27 am
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Si estás trabajando en Linux, podrías utilizar el comando wc *, y te manda el número de línea. Very Happy
Mensaje Mar May 13, 2008 10:09 am
ausias
Perlero Nuevo
Perlero Nuevo
Registrado: 13 May 2008
Mensajes: 4
Responder citando

Hola:D

Conseguí lo que buscaba:
Perl:
#!/bin/perl

use strict;

our $count = 1;

sub print_LOG {
        my $message = $_[0];
        print($message);
        $count += ($message =~ tr/\n/\n/);
}

print "===================\n";

print_LOG("prova\n");
print_LOG("a 2u hf\n\n");
print_LOG("mes\n");

print "\n";
print "===================\n";
print "Te $count linies\n";

exit 0


Gracias a todos:)
Por mi puede cerrarse el hilo.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group