• Publicidad

Patrón en cadena de caracteres

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

Patrón en cadena de caracteres

Notapor escanda » 2008-08-07 11:35 @524

Hola, ¿qué tal?. Como saben soy nuevo en esto, lo que estoy intentando hacer y necesito su ayuda, es contar la cantidad de comas que hay dentro de una variable ($frase), ¿cómo se puede lograr esto?

Gracias.
Saludos.
escanda
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2008-07-11 10:15 @469

Publicidad

Notapor explorer » 2008-08-07 11:52 @536

Pues... de varias formas...

La más fácil... con un bucle:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;

my $frase = "
En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho
tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua,
rocín flaco y galgo corredor. Una olla de algo más vaca que carnero, salpicón
las más noches, duelos y quebrantos los sábados, lentejas los viernes, algún
palomino de añadidura los domingos, consumían las tres partes de su hacienda.
El resto della concluían sayo de velarte, calzas de velludo para las fiestas
con sus pantuflos de lo mismo, los días de entre semana se honraba con su
vellori de lo más fino. Tenía en su casa una ama que pasaba de los cuarenta, y
una sobrina que no llegaba a los veinte, y un mozo de campo y plaza, que así
ensillaba el rocín como tomaba la podadera. Frisaba la edad de nuestro hidalgo
con los cincuenta años, era de complexión recia, seco de carnes, enjuto de
rostro; gran madrugador y amigo de la caza. Quieren decir que tenía el
sobrenombre de Quijada o Quesada (que en esto hay alguna diferencia en los
autores que deste caso escriben), aunque por conjeturas verosímiles se deja
entender que se llama Quijana; pero esto importa poco a nuestro cuento; basta
que en la narración dél no se salga un punto de la verdad."

;

my $hay_coma;
for (my $i = 0; $i < length($frase); $i++ ) {

    if (substr($frase,$i,1) eq ',') {
        $hay_coma++;
    }
}

print "Hay $hay_coma comas\n";

__END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Otra forma: haciendo una transformación a nada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $hay_coma = $frase =~ tr/,//;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Es decir, tr/// busca todas las comas y las cambia por nada (por lo que no hace nada), pero sí que, como valor añadido, nos devuelve el número de veces que lo ha hecho (que no ha hecho nada, quiero decir).

Otra forma: con una expresión regular:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $hay_coma = () = $frase =~ /,/g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
La expresión regular busca todas (/g) las comas, y las devuelve en contexto lista (()). Pero como al otro lado tenemos un escalar, obtenemos el número de comas encontradas. Escrito de otra manera más clara:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @hay_coma = $frase =~ /,/g;
my $hay_coma = @hay_coma;
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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor escanda » 2008-08-08 08:00 @375

explorer, gracias por la respuesta, pero he probado las 3 opciones dadas, y ninguna ha de funcionar, ¿se te ocurre alguna otra? ¿o algo que deba agregar para que ande?

Gracias.
escanda
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2008-07-11 10:15 @469

Notapor teco000 » 2008-08-08 09:20 @431

A mí si me funcionaron. ¿Qué mensaje te sale?
teco000
Perlero nuevo
Perlero nuevo
 
Mensajes: 67
Registrado: 2008-05-29 15:22 @682
Ubicación: Guatemala

Notapor escanda » 2008-08-08 09:22 @432

Ningún error, solo que no me cuenta las comas, es como que no hace nada.
escanda
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2008-07-11 10:15 @469

Notapor explorer » 2008-08-08 11:16 @511

Sin ver el código, es difícil decir dónde falla.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor escanda » 2008-08-08 13:45 @614

Ya logré que funcione lo de las comas, ahora lo que necesito es obtener parte de una frase.

Ejemplo : $frase = "perl.200443212.txt"

En ese caso deseo obtener todo el número, es decir, del punto al punto.

Gracias
Saludos.
escanda
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2008-07-11 10:15 @469

Notapor teco000 » 2008-08-08 15:59 @707

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;

my $frase = "perl.200443212.txt";

$frase =~ m/\.(\d+)\./;
print"$1\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
teco000
Perlero nuevo
Perlero nuevo
 
Mensajes: 67
Registrado: 2008-05-29 15:22 @682
Ubicación: Guatemala

Notapor escanda » 2008-08-11 08:27 @394

No me ha funcionado, ¿alguna otra opción?
escanda
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2008-07-11 10:15 @469

Notapor explorer » 2008-08-11 10:35 @482

Aquí tienes dos variantes:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l

$frase = "perl.200443212.txt";

($numero) = $frase =~ /(\d+)/;
print $numero;

(undef, $numero, undef) = split(q{\.}, $frase);
print $numero;

__END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sale:
Código: Seleccionar todo
explorer@portatil:~/Documents/Desarrollo> ./kk.pl
200443212
200443212
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron