• Publicidad

Reconecer patrón

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

Reconecer patrón

Notapor STM » 2010-10-20 10:43 @488

Hola,

Tengo una archivo que presenta el siguiente formato.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Data1 (1.2),(7.8),(8.5),(10.5)
Data2 (5.3),(5.6),(56.7),(78.6)
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Yo quisiera recuperar toda la información a partir del primer "(" y guardarla en un arreglo.

Para eso escribí if(@arreglo[$i]) =~ m/\(/
Perl toma el paréntesis como un paréntesis real y no como un patrón.

¿Podrían decirme cómo puedo indicarle a Perl que este "(" es un patrón y no un paréntesis?


Muchas gracias.
STM
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2008-07-01 07:12 @342

Publicidad

Re: Reconecer patrón

Notapor explorer » 2010-10-20 10:49 @492

Has escrito mal la línea...

No es

if ( @arreglo[$i] ) =~ m/\(/

sino

if ( $arreglo[$i] =~ m/\(/ ) { ... }

En cuanto al paréntesis, has puesto una contrabarra delante, escapándolo, así que está bien.

Atento también al sigil: no es '@' sino '$', ya que estás recuperando un solo valor, no varios.
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: Reconecer patrón

Notapor STM » 2010-10-23 07:43 @363

Hola explorer, gracias por la respuesta.

Sin embargo la instrucción "if ( $arreglo[$i] =~ m/\(/ )" no funciona. Perl sigue seleccionando toda la línea

Data1 ( 1.2 ) ( 7.8 ) ( 8.5 ) ( 10.5 )

Yo quisiera que él seleccionara todo lo que está después del "Data1"

( 1.2 ) ( 7.8 ) ( 8.5 ) ( 10.5 )

Yo intenté hacer esto al escribir:

if($array[$j])=~ /(.+)\(/){...}

pero tampoco funciona, peor que eso, esta instrucción genera un bloque; no entiendo por qué y el programa se queda en el bucle y no hace nada.

Gracias.
STM
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2008-07-01 07:12 @342

Re: Reconecer patrón

Notapor explorer » 2010-10-23 08:44 @405

Perdona, no te había contestado del todo.

La expresión regular que tienes solo identifica si la línea tiene o no un paréntesis, pero no está capturando nada.

Así que hay que cambiar la expresión regular, para que lo haga.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$arreglo[$j] = ( 'Data1 ( 1.2 ) ( 7.8 ) ( 8.5 ) ( 10.5 )' );

if ( $arreglo[$j] =~ /([(].*)/ ) {  # nos quedamos con lo que hay desde el primer paréntesis hasta el final
                                   #  en $1 tenemos la captura del primer par de paréntesis
    print "$1\n";                  # ( 1.2 ) ( 7.8 ) ( 8.5 ) ( 10.5 )
}
Coloreado en 0.002 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 Básico

¿Quién está conectado?

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