• Publicidad

Motor de menús desde fichero de texto

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

Motor de menús desde fichero de texto

Notapor joshuasilva » 2010-12-02 05:21 @264

¡Muy buenas!

Soy nuevo en Perl y tengo una duda, quizá más conceptual que otra cosa. Tengo que hacer un pequeño motor de menús en Perl que imprima por pantalla una serie de opciones y ejecuta las acciones asociadas. Toda esta información la sacará de un archivo de texto del siguiente estilo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1||Opcion 1||Comando 1
2||Opcion 2||Comando 2
3||Opcion 3||Comando 3
4||Opcion 4||Comando 4
0||Salir||exit
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Para desarrollar este programa necesito 2 partes:
- Una primera que se encargue de imprimir las dos primeras columnas (número de opción y descripción de la opción).
- Una segunda que, habiendo el usuario elegido un número, acceda a la acción correspondiente y la lance.

Mi idea es hacer una array de array, pero no sé si es la opción más adecuada en este caso, y tampoco sé muy bien por dónde empezar a desarrollarla.

¡Muchas gracias por vuestro tiempo!
joshuasilva
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-12-01 07:13 @342

Publicidad

Re: Motor de menús desde fichero de texto

Notapor explorer » 2010-12-02 06:59 @333

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

Se puede resolver de muchas maneras.

Por ejemplo, podrías leer el texto en un array. Y luego, cuando el usuario pulse una opción, la buscas de entre los elementos del array por medio de una expresión regular.

O quizás más sencillo aún. Veo que todas las opciones son números naturales. Pues te vale meter cada opción en un elemento de un array, indexado por el número de opción. Por ejemplo, Salir se metería en el índice 0. Así, cuando el usuario pulse una opción, no tienes que buscarla, pues ya sabes en qué índice se encontrará.

Luego, solo tienes que leer el elemento y extraer el comando. Con un split(), por ejemplo.
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: Motor de menús desde fichero de texto

Notapor joshuasilva » 2010-12-02 07:46 @365

¡Wow, realmente rápida la respuesta! Muchas gracias ;)

Voy a ir tocando y cuando tenga hecha la base del motor os digo cómo lo he hecho. De momento para imprimir el menú he hecho lo siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub imprimeMenu {
  2.         while (<MENU>) {
  3.                 push(@menu,$_);
  4.                 chomp;
  5.                 print "\t [";
  6.                 print ((split /\|\|/, $_) [0]);
  7.                 print "] : ";
  8.                 print ((split /\|\|/, $_) [1]);
  9.                 print "\n";
  10.         }
  11. }
  12.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Con lo que me queda lo que buscaba:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
     [1] : Opcion 1
     [2] : Opcion 2
     [3] : Opcion 3
     [4] : Opcion 4
     [0] : Salir
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Mañana me pongo con la ejecución de comandos, ¡¡¡gracias otra vez!!!
joshuasilva
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-12-01 07:13 @342

Re: Motor de menús desde fichero de texto

Notapor joshuasilva » 2010-12-03 06:23 @307

Ya he encontrado la solución, lo he hecho así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub abreFichero {
  2.         my $fichero_menus = $_[0];
  3.         open MENU, "$fichero_menus" or die
  4.         "Error del sistema de menús. No se pudo abrir el archivo $fichero_menus. Inicie sesión de nuevo para que
  5.         el sistema se auto-repare. Si es la segunda vez que ve este error contacte con el administrador.\n";
  6. }
  7.  
  8. sub cierraFichero {
  9.         close(MENU);
  10. }
  11.  
  12. sub imprimeMenu {
  13.         while (<MENU>) {
  14.                 push(@menu,$_);
  15.                 chomp;
  16.                 print "\t [";
  17.                 print ((split /\|\|/, $_) [0]);
  18.                 print "] : ";
  19.                 print ((split /\|\|/, $_) [1]);
  20.                 print "\n";
  21.         }
  22. }
  23.  
  24. sub introduceOpcion {
  25.         print "\nIntrodueixi una opció: ";
  26.         my $opcion = <STDIN>;
  27.         return $opcion;
  28. }
  29.  
  30. sub ejecutaOpcion {
  31.         my $opcion = $_[0];
  32.         while (<MENU>) {
  33.                 push(@menu,$_);
  34.                 chomp;
  35.                 if ($opcion == ((split /\|\|/, $_) [0])) {
  36.                         system((split /\|\|/, $_) [2]);
  37.                 }
  38.         }
  39.         print "\n";
  40. }
  41.  
  42. my $fichero_menus = shift;
  43. abreFichero($fichero_menus);
  44. imprimeMenu;
  45. cierraFichero();
  46. my $opcion = introduceOpcion();
  47. abreFichero($fichero_menus);
  48. ejecutaOpcion($opcion);
  49. cierraFichero();
  50.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¡¡Gracias!!
joshuasilva
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-12-01 07:13 @342

Re: Motor de menús desde fichero de texto

Notapor explorer » 2010-12-03 08:26 @393

Fantástico.

Ahora que sabes hacer esto, ya puedes usar Term::Menus :)
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 24 invitados