• Publicidad

Usando substr

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

Usando substr

Notapor bartg01 » 2008-04-07 03:27 @186

Terminado mi código me dí cuenta de que substr no sustituía en mi cadena lo que yo quería, ¿alguien podría ayudarme?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 my $string = "N" x 2500;
 my $start = 1000;
 my $end = 1500;
 
 my $desp = $end-$start;
 substr ($string,$start,$desp) =~ s/N/B/ig;

 while ($string =~ m/B+/ig) {

                my $longitud = length $&;
                my $slongitud = length $string;
                my $posi = pos $string;
                my $posf = $posi + $longitud;
                print "$posi\t$posf\t$longitud\t$slongitud\n";
               
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El printeo en pantalla es: 1500 2000 500 2500

Es decir, mueve el inicio del substring un número de posiciones igual al desplazamiento.
bartg01
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2007-11-29 16:15 @718

Publicidad

Notapor bartg01 » 2008-04-07 07:11 @341

La cosa sería poder volver a recuperar las posiciones tras la sustitución, pero $start y $end no son iguales a $posi y $posf.

Ese es el problema que tengo.
bartg01
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2007-11-29 16:15 @718

Notapor explorer » 2008-04-07 07:23 @349

pos() devuelve la posición donde quedó el cursor dentro del $string después de aplicar la expresión regular.

Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -le '$_ = "01234567Hola234567"; /H/g; print pos'
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

devuelve 9 porque el cursor está sobre la 'o'. Y
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -le '$_ = "01234567Hola234567"; /Hola/g; print pos'
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

devuelve 12 porque terminó después del 'Hola'.

Una forma de buscar dentro de un string, si sabes lo que buscas, puede ser usando index() y/o rindex().

Si aún así necesitas usar una expresión regular, puedes probar a restarle la longitud de lo encontrado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -le '$_ = "01234567Hola234567"; /Hola/g; print pos()-length($&)' # 8
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

(y seguro que hay otras formas mejores)
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 explorer » 2008-04-07 07:32 @356

Ya lo encontré...

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -le '$_ = "01234567Hola234567"; /Hola/g; print $-[0],"->",$+[0]'  # 8->12
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Si es que no hay nada como leer la documentación (en este caso, perlvar).
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 bartg01 » 2008-04-08 04:06 @212

Gracias de nuevo explorer.

Yo también tiendo a leer la documentación pero hay veces que no hay quien encuentre lo que busca, quizás no sepa buscarlo.

Gracias otra vez y hasta otra.
bartg01
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2007-11-29 16:15 @718


Volver a Básico

¿Quién está conectado?

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