sábado, 4 de septiembre de 2010

Tercer reporte(Lenguajes de scripting)

AWK
Realicé un programa en awk que ayuda con la sintaxis de los acentos en el lenguaje html. Lo primero que hice fué escribir el código abriendo desde emacs el archivo que llamé cambiahtml.awk . Como muchos sabemos poner los acentos en lenguaje html aveces es un poco tedioso ya que en vez de escribir la palabra simplemente con su acento se tiene que poner el código para ese carácter por ejemplo la palabra "arbol" es necesario escribir áarbol, para lograr ca,biar los acentos por su traduccion al html utilicé la funcion gsub(r, s), que sirve para intercambiar r por s.

#!/usr/bin/awk -f
{gsub("á","\\á");gsub("Á","\\Á");
gsub("é","\\é");gsub("É","\\É");
gsub("í","\\í");gsub("Í","\\Í");
gsub("ó","\\ó");gsub("Ó","\\Ó");
gsub("ú","\\ú");gsub("Ú","\\Ú");
gsub("ñ","\\ñ");gsub("N","\\Ñ");
gsub("ü","\\ü");gsub("Ü","\\Ü");
print $0}
Para probar que mi programa funciona creé un documento al que llamé archivo.txt, y simplemente le pegué un texto cualquiera.
Después en el terminal tecleé el siguiente comando:
awk -f cambiahtml.awk archivo.txt > codigo.txt
lo que hacen estas instrucciones es que cambiahtml.awk cambia el texto que se encuentra en archivo.txt y la salida que se produce la mando a codigo.txt para poder ver como quedarón ya los acentos cambiados o para ver directamente en el navegador poniendo en vez de codigo.txt codigo.html:
awk -f cambiahtml.awk archivo.txt > codigo.html
Elegí awk para este programa, porque awk es un lenguaje ideal para el procesamiento de texto.


Sh
Lo que hace mi programa(CompyEjec.sh) en sh es compilar y ejecutar archivos de java, c, c++ o python. Elegí este lenguaje porque es muy útil para cuando se tienen que repetir los comandos en la terminal, así solamente se ejecuta el programa sh y ganas algo de tiempo, por ejemplo en el programa que realicé compilas y ejecutas en un solo paso.

#!/bin/sh
case $1 in
*.py)
echo Ejecutando $1
python $1 ;;
*.java)
echo Compilando y ejecutando $1
javac $1
java ${1%.java};;
*.c)
echo Compilando y ejecutando $1
gcc $1
./a.out;;

*.cpp)
echo Compilando y ejecutando $1
g++ $1 -o ${1%.cpp}
./${1%.cpp};;
*)
echo $1 archivo no válido ;;
esac
Explicación de mi código:
La línea de case $1 in lo que hace es tomar el primer argumento de la línea de ordenes(en este caso sería el nombre del programa que se quiere compilar y ejecutar), para entrar a las opciones del case se busca en el nombre del archivo los que contengan la extensión .py, .c, .cpp o .java y en el caso de que el archivo no contenga ninguna de estas extensiones se da un mensaje "archivo no válido".
Es muy probable que se estén preguntando que hacen las lineas que contienen un código parecido a esto java ${1%.java}, bueno como todos sabemos la forma de compilar un archivo .java es javac archivo.java y para ejecutarlo java archivo, entonces lo que yo necesité hacer para obtener solamente el nombre del archivo sin su extensión es cortar el .java con la expresión java${1%.java}, lo mismo para los arhivos en c y cpp.

Funcionamiento de mi programa
Primero se escribe el nombre de mi archivo .sh(CompyEjec.sh) y después el archivo que se quiere compilar y ejecutar, en este ejemplo el archivo tiene una extensión .txt por lo que es un archivo no válido

Ejemplo archivo .java


Ejemplo archivo.py

Ejemplo archivo.c

Ejemplo archivo.cpp


Perl
Y para Perl hice un programa(nprimos.pl) para identificar si un número es primo o no, decidí hacer este programa de números primos porque recuerdo que fué el primer programa que hice en C y me surgieron demasiadas dudas en cuanto a las declaraciones de variables y bucles, para este programa Perl investigué la forma en que se escribe el for, if y do..while.
Aquí les dejo el código de mi programa:

#!/usr/bin/perl

print "Numero primo o no?\n";

do{
$cont = 0;
print "Ingresa el numero\n";
$numero = <STDIN>;
for($i=1;$i<=$numero;$i++){
$x = $numero % $i;
if($x == 0){
$cont++;}
}
if($cont > 2 || $numero == 1 || $numero == 0){
print "No es numero primo\n";}
else{
print "Si es numero primo\n";}
print "¿Probar un numero mas? (Si=1 No=0)\n";
$op = <STDIN>;
}while($op == 1);
Y algunas ejecuciones:

9 comentarios:

  1. Explicas muy bien lo que hace cada programa, está muy bien redactado.Me gustaría que siguieras subiendo ejemplos pequeños de estos lenguajes.

    ResponderEliminar
  2. Sandra me gusta mucho como explicas todo, le entiendo muy bien y me ayuda a aprender más. También lo pones muy ordenado y esto lo hace más llamativo. Gracias por la entrada (:

    ResponderEliminar
  3. que bueno que te gustó Carmen, es la idea :D

    ResponderEliminar
  4. Hola cecy!, quise descargar el codigo de perl, pero el link esta roto :/
    saludos :)

    ResponderEliminar
  5. Tambien cecy para decirte que otra forma de obtener el valor de una variable de entrada puedes utilizar la función chomp.
    puedes revisar mi blog, de mi script..

    aqui te dejo un link de lo que hace esa función.
    http://perlmeme.org/howtos/perlfunc/chomp_function.html

    Saludos:)

    ResponderEliminar
  6. Hola, lo que yo se de la función chomp es que quita un enter, es decir una nueva linea despueés de una cadena. Eso lo entendí con un programa que realice y que la Dra me ayudo.

    ResponderEliminar
  7. ok gracias Roberto,,
    ok Gemma no sabia exactamente cual era la diferencia.

    ResponderEliminar
  8. Muy buenos programitas. Te pongo los tres puntos del tercer reporte.

    ResponderEliminar