• Publicidad

expresiones regulares...

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

expresiones regulares...

Notapor scorpion » 2006-11-14 19:46 @865

hola a todos...

resulta que estoy extrayendo valores de un fichero de configuración de formato:

Código: Seleccionar todo
nombre1 = cadena1
nombre2 = cadena2
......

tengo el siguiente código.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 while (<LOG>) {
   chomp;
   next if !/^\s*(\w+)\s*=\s*(\w[\s\w]+\w)\s*$/;
   $var{$1} = $2;
 }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

este me funciona... PEROOOOO si una de las cadenas tiene un punto (.) ya no me lo toma.... ¿¿¿ cómo podría modificar la linea de la expresión regular para poder obtener el valor ???

Gracias por adelantado...

saludos...

scorpion....
scorpion
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2006-05-31 16:25 @726

Publicidad

Notapor monoswim » 2006-11-14 19:49 @867

Porque no usas la función split y ya...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @lines = <LOG>;
foreach my $line (@lines) {
  my ($key,$value) = split(/=/,$line);
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Espero que te sirva

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor scorpion » 2006-11-14 19:55 @871

pero es que con esa función tomaría los espacios en blanco al principio y al final de las nombre y las cadenas si los tuvieran.... también quiero quitarle los espacios en blanco....

gracias por tan pronta respuesta... ¿¿¿ alguna nueva idea ???

gracias por adelantado...

scorpion...
scorpion
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2006-05-31 16:25 @726

Notapor jclp77 » 2006-11-14 20:41 @903

Hola, la verdad no se muy bien programar en Perl, pero tal vez este ejemplo rudimentario te pueda servir. Espero sea lo que necesitas

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@lines=("  nombre1 12   1 = cadena1 11 11 ", "  no mb re 2 =   ca den a2 ");

foreach my $line (@lines){
  my ($key,$value) = split(/=/,$line);
  $key =~ s/^\s+|\s+$//g;
  $value =~ s/^\s+|\s+$//g;
  print "$key=$value\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Saludos
jclp77
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2006-09-06 12:04 @544
Ubicación: México

Notapor explorer » 2006-11-14 21:26 @935

Menos es más.

Vemos, según tu expresión regular, que en la primera parte, antes del '=' hay caracteres alfanuméricos. El problema es si aparece ahí un '.'.

Y en la segunda parte, hay mezcla de espacios en blanco y alfanuméricos. Es decir, de todo.

Entonces, al principio, necesitas buscar todo aquello que no sea un espacio en blanco, junto que todo aquello que no sean espacios al final de la línea, después:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while (<LOG>) {
  chomp;
  if ( /^\s*(\S+)\s*=\s*(.+)\s*$/ ) {
    $var{$1} = $2;
  }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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


Volver a Intermedio

¿Quién está conectado?

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