• Publicidad

Orden de la letra Ñ

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

Orden de la letra Ñ

Notapor jorbuedo » 2012-05-11 05:41 @278

¡Buenas! Soy nuevo por aquí y tengo una pregunta para ustedes. No he encontrado lo que quería en el buscador, quizás porque no sé cómo buscarlo.

El caso es que quiero escribir un programa de cifrado (clásico) de texto, como puede ser el Caesar. A cada letra le sumas un valor para conseguir otra, y tal.

Pero esto es en español, y la letra 'Ñ' debería estar por ahí en medio.

Quiero que 'a..z' y 'A..Z' devuelvan 27 letras, con la 'Ñ' después de la 'N'. Y si intento sumarle 2 posiciones a la 'M', debe dar la 'Ñ', no la 'O'.

He probado con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use POSIX qw(locale_h);
  2. use locale;
  3. setlocale(LC_ALL, "es_ES");
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Pero, o no es lo que quiero, o no lo escribo bien.

Mi versión de perl es v5.12.3.

¡Un saludo!
jorbuedo
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-05-11 05:27 @269

Publicidad

Re: Orden de la letra Ñ

Notapor explorer » 2012-05-11 10:39 @485

Bienvenido a los foros de Perl en Español, jorbuedo.

Mira este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.10;                                    # Un mínimo de calidad (pero es mejor usar v5.14)
  3. use open OUT => qw':utf8 :std';               # Toda salida será en utf-8, incluida la salida estándar
  4.                                               # (la terminal de línea de comandos está funcionando así)
  5. use locale;                                   # El programa debe hacer caso a la conf. regional vigente
  6. use POSIX qw(locale_h);                       # Importación de las constantes y funciones POSIX
  7. setlocale(LC_ALL, "es_ES");                   # Activamos la conf. regional "es_ES"
  8.  
  9. say +(sort grep /\w/, map { chr } 0..255);    # Vamos a sacar los 256 primeros "caracteres"
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

La salida es monstruosa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
µ_0123456789aAáÁàÀâÂåÅäÄãêæÆbBcCçÇdDðÐeEéÉèÈêÊëËfFgGhHiIíÍìÌîÎïÏjJkKlLmMnNñÑoOóÓòÒôÔöÖõÕøغpPqQrRsSßtTuUúÚùÙûÛüÜvVwWxXyYýÝÿzZþÞ
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Y sí: son todos los caracteres posibles en los primeros 256 códigos, ordenados según el Español. Fíjate que las 'ñ' y 'Ñ' están donde tu quieres... pero...
* hay muchos más caracteres de los que te esperabas ;)
* están mezcladas las mayúsculas y minúsculas

Me parece que lo que quieres es solo un subconjunto de todo esto. Entonces... se podría hacer así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.10;
  3. use utf8;
  4. use open OUT => qw':utf8 :std';
  5.  
  6. my @letras = ('a'..'n', 'ñ', 'o'..'z');
  7.  
  8. @letras = (@letras, map {uc $_} @letras);   # las mayúsculas siguen a las minúsculas
  9.  
  10. say "[@letras]";
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[a b c d e f g h i j k l m n ñ o p q r s t u v w x y z A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


P.D. Yo creo que esto es una chapuza, porque debería haber un método mejor.
Estamos traduciendo las 44 recetas para manejar Unicode en Perl. En alguna de ellas se comentará esto, seguro.
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: Orden de la letra Ñ

Notapor jorbuedo » 2012-05-12 05:07 @254

Usaré la lista, de momento. ¡Gracias!
jorbuedo
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-05-11 05:27 @269


Volver a Básico

¿Quién está conectado?

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