• Publicidad

Validación de errores a la entrada

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

Validación de errores a la entrada

Notapor jairo15 » 2016-10-03 16:14 @718

¿Cómo puedo diferenciar entre letra y números al momento de que el usuario ingrese datos?

Por ejemplo, pido al usuario que ingrese números y por error pone una letra. Sé que en C el scanf() arroja un booleano y con eso es más fácil determinarlo, pero, ¿en Perl también se puede hacer de esa forma?

Si no, ¿cómo se hace?
jairo15
Perlero nuevo
Perlero nuevo
 
Mensajes: 31
Registrado: 2016-09-11 13:27 @602

Publicidad

Re: Validación de errores a la entrada

Notapor explorer » 2016-10-03 16:38 @734

Se puede hacer de varias maneras.

Una de ellas es sumar un '0' al valor que nos manda el usuario, y de esa manera se convierte, sí o sí, en un número. Si hubiese entrada una letra (o más), al sumarle el '0', seguirá dando un '0', y de esa manera podemos informar de un error (siempre y cuando consideremos que meter un '0' no es tampoco correcto).
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if (0+ $entrada) {
  2.     # entró un número (positivo)
  3. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Otra forma es por medio de una expresión regular.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Por favor, introduzca un número: ";
  2. chomp(my $entrada = <>);
  3. if ($entrada =~ /^\d+$/) {      # de principio a fin, un conjunto de dígitos
  4.     # entró un número
  5. }
  6. else {
  7.     # entró otra cosa
  8. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Otra opción es usar la función looks_like_number() del módulo Scalar::Util (incluido en Perl).
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Scalar::Util 'looks_like_number';
  2. chomp(my $entrada = <>);
  3. my $es_un_numero = looks_like_number( $entrada );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Devuelve verdadero si perl cree que $entrada contiene un número.

Hay formas más elaboradas. Todo depende de la entrada que quieras considerar.
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

Re: Validación de errores a la entrada

Notapor jairo15 » 2016-10-03 19:27 @852

Gracias por la pronta respuesta.

Otra duda. ¿Habrá manera de separar una palabra y ponerla en casillas al azar en una matriz de n columnas y m filas?

Más o menos así:

palabra = perro

A R P A Y E R T Y
X C R T U B M K L
W Q E R V B N M T
A W E R T U Y O M

Siendo las letras en negritas acomodadas al azar y de fila en fila.

Espero que haya explicado bien la duda.
jairo15
Perlero nuevo
Perlero nuevo
 
Mensajes: 31
Registrado: 2016-09-11 13:27 @602

Re: Validación de errores a la entrada

Notapor explorer » 2016-10-04 15:11 @674

Para separar una palabra en caracteres puedes usar split() con la exp. reg. vacía: //. Más información en perldoc -f split

Para elegir al azar usa la función rand(). Más información en perldoc -f rand

Para acceder a una matriz bidimensional, puedes usar un array de arrays. Tienes ejemplos detallados en perldoc perllol

(Versión en español de estos documentos aquí).
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


Volver a Básico

¿Quién está conectado?

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

cron