• Publicidad

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

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

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

Notapor ausias » 2008-05-13 09:09 @423

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$numerolineas = numero_de_lineas('fichero.txt')
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


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

Muchas gracias :)
ausias
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-05-13 07:03 @335

Publicidad

Notapor explorer » 2008-05-13 09:30 @437

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

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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub numero_de_lineas {
    my $fichero = shift;

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

    return scalar @lineas;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Es más... apuesto a que se puede hacer de doce formas distintas más... ¡Adelante, gente!
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor ausias » 2008-05-13 09:48 @450

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 :)
ausias
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-05-13 07:03 @335

Notapor explorer » 2008-05-13 09:52 @453

ausias escribiste: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'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor ausias » 2008-05-13 10:24 @475

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

¿Sabéis cómo podría implementar:?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  while ($message contenga "\n") {
    $message=$message - "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Muchas gracias
ausias
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-05-13 07:03 @335

Notapor Kiloko » 2008-05-13 10:27 @477

Si estás trabajando en Linux, podrías utilizar el comando wc *, y te manda el número de línea. :D
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor ausias » 2008-05-13 11:09 @506

Hola:D

Conseguí lo que buscaba:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Gracias a todos:)
Por mi puede cerrarse el hilo.
ausias
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-05-13 07:03 @335


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 18 invitados