• Publicidad

Leer el último elemento de una frase del fichero

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

Re: Leer el último elemento de una frase del fichero

Notapor explorer » 2010-07-02 11:28 @519

Esa expresión regular, lo que hace es quitar los espacios en blanco sobrantes, si los hubiere. No veo que haga nada al respecto de sacar el nombre de las columnas.

Aquí hay una solución con split:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my $cabecera = 'var1 INT,var2 INT,var3 INT,var4 VARCHAR(10),var5 VARCHAR(10),var6 INT,var7 INT,var8 INT,var9 INT,var10 FLOAT,var11 FLOAT';
  7.  
  8. my @nombres_columnas;
  9. my @tipos_columnas;
  10.  
  11. for my $campo ( split /\s*,\s*/, $cabecera ) {
  12.  
  13.     my($columna, $tipo) = split " ", $campo;
  14.  
  15.     push @nombres_columnas, $columna;
  16.     push @tipos_columnas,   $tipo;
  17. }
  18.  
  19. use Data::Dumper;
  20. print Dumper \@nombres_columnas;
  21. print Dumper \@tipos_columnas;
  22.  
  23. __END__
  24. $VAR1 = [
  25.           'var1',
  26.           'var2',
  27.           'var3',
  28.           'var4',
  29.           'var5',
  30.           'var6',
  31.           'var7',
  32.           'var8',
  33.           'var9',
  34.           'var10',
  35.           'var11'
  36.         ];
  37. $VAR1 = [
  38.           'INT',
  39.           'INT',
  40.           'INT',
  41.           'VARCHAR(10)',
  42.           'VARCHAR(10)',
  43.           'INT',
  44.           'INT',
  45.           'INT',
  46.           'INT',
  47.           'FLOAT',
  48.           'FLOAT'
  49.         ];
  50.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

En el primer split() indicamos que los separadores son comas con, opcionalmente, espacio en blanco a los lados.

Aunque también se puede realizar con expresiones regulares, claro, ya que se trata de un patrón con una cierta regularidad:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my $cabecera = 'var1 INT,var2 INT,var3 INT,var4 VARCHAR(10),var5 VARCHAR(10),var6 INT,var7 INT,var8 INT,var9 INT,var10 FLOAT,var11 FLOAT';
  7.  
  8. my @nombres_columnas;
  9. my @tipos_columnas;
  10.  
  11. while ( $cabecera =~ /(\w+)\s+([^,]+)/g ) {
  12.  
  13.     my($columna, $tipo) = ($1, $2);
  14.  
  15.     push @nombres_columnas, $columna;
  16.     push @tipos_columnas,   $tipo;
  17. }
  18.  
  19. use Data::Dumper;
  20. print Dumper \@nombres_columnas;
  21. print Dumper \@tipos_columnas;
  22.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Con $cabecera =~ /(\w+)\s+([^,]+)/g, estamos buscando en $cabecera, de forma repetida (/g), una palabra, que guardamos en $1 ((\w+)) separada por uno o más espacios (\s+), y una segunda captura de cualquier cosa que no sea una coma ([^,]+).

De esa forma, capturamos las dos partes: el nombre de columna y su tipo, que almacenaremos en arrays (bueno, podríamos guardarlo en otro tipo de estructura de datos).

Desde luego, es más claro el split().
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

Publicidad

Re: Leer el último elemento de una frase del fichero

Notapor zangre » 2010-07-05 05:20 @263

explorer escribiste:Con $cabecera =~ /(\w+)\s+([^,]+)/g, estamos buscando en $cabecera, de forma repetida (/g), una palabra, que guardamos en $1 ((\w+)) separada por uno o más espacios (\s+), y una segunda captura de cualquier cosa que no sea una coma ([^,]+).

De esa forma, capturamos las dos partes: el nombre de columna y su tipo, que almacenaremos en arrays (bueno, podríamos guardarlo en otro tipo de estructura de datos).

Desde luego, es más claro el split().


¡Wow!, con razón no lo saqué. Tengo que buscar más información sobre expresiones regulares porque por lo visto aún no lo controlo, aunque claro, no llevaré ni tres semanas trasteando Perl. :lol:
Avatar de Usuario
zangre
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2010-06-16 06:35 @316
Ubicación: Barcelona

Re: Leer el último elemento de una frase del fichero

Notapor explorer » 2010-07-05 06:51 @327

En Wikipedia tienes un buen resumen inicial, pero ten en cuenta que en Perl dispone de una gramática superior a las expresiones regulares del resto de lenguajes. Sobre todo, a partir de Perl v5.10.
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

Re: Leer el último elemento de una frase del fichero

Notapor zangre » 2010-07-06 04:41 @237

El resumen inicial ya lo tengo machacado; me pasé toda una semana leyendo e informándome sobre Perl, con los libros de O'Reilly y tutoriales, la Wikipedia y esta página. :)

Igualmente el primer proyecto ya está hecho, ahora mi intención es un pelín más ambiciosa, y es poder crear una base de datos entera desde 0. A ver qué tal, con el código que tengo hecho y el que me has corregido tú, tengo mucho avanzado. :D
Avatar de Usuario
zangre
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2010-06-16 06:35 @316
Ubicación: Barcelona

Anterior

Volver a Básico

¿Quién está conectado?

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