sábado, 11 de agosto de 2012

Programación en VBA ... ejemplo no. 1


Este es un ejemplo de como programar con Visual Basic para Aplicaciones  (VBA).


1. Calcular el valor futuro de una inversión dado un valor presente, una tasa de interés y un periodo de pago.

Controles a usar:

- 3 Label
- 3 TextBox
- 3 CommandButton

Para abrir el editor de macros (en Microsoft Excel) presionas alt + F11.


La fórmula es:
valorFuturo= valorPresente*pow(1+tasa_interés/100,periodo)

Al dar clic sobre el formulario se abre el editor de código de VB. Para declarar una variable debes usar Dim algo As TipoVariable. Puedes usar ventanas tipo "alert" (MsgBox) para mostrar el resultado o algún aviso al usuario.




Para ejecutar debes presionar F5.


Código completo:

Option Explicit
'esto es un comentario
Dim res As String ' aqui almaceno el resultado
'botón calcular
Private Sub CommandButton1_Click()
'valorFuturo=valorPresente*pow(1+tasa/100,periodo)
If TextBox1.Text = "" And TextBox2.Text = "" And TextBox3.Text = "" Then
res = "No hay nada que evaluar"
MsgBox res, vbCritical, "Alerta"
Else
res = Val(TextBox1.Value) * Val(1 + TextBox2.Value / 100) ^ Val(TextBox3.Value)
MsgBox "Valor presente: " & TextBox1.Value & vbCrLf & "Tasa de interés: " & TextBox2.Value & vbCrLf & "Periodo: " & TextBox3.Value & vbCrLf & "Valor futuro:" & res, vbDefaultButton1, "Resultado"
End If
End Sub

'botón limpiar
Private Sub CommandButton2_Click()
TextBox1.Text = "": TextBox2.Text = "": TextBox3.Text = ""
End Sub

'botón finalizar
Private Sub CommandButton3_Click()
End
End Sub


Se puede activar/aparecer el formulario desde una hoja, para eso puedes ocupar un botón.

Sub Botón1_Haga_clic_en()
UserForm1.Show ' esto activa el formulario
End Sub


martes, 7 de agosto de 2012

Python ... ejemplos prácticos no. 7







Una forma de ejecutar programas Python.

Archivos *.bat (Windows), creamos un archivo llamado "ejecuta.bat" y colocamos:
@echo off
python programa.py

Al dar clic sobre el se ejecuta.

En Linux usamos un archivo *.sh, creamos un archivo llamado "ejecuta.sh" y colocamos:
python programa.py

Debemos otorgarle un permiso de ejecución:
chmod u+x ejecuta.sh

Y lo ejecutamos:
./ejecuta.sh

Groovy vs Java vs Python

Los lenguajes de scripting como Groovy o Python permiten escribir pequeños programas y así ahorrar varias líneas de código (en comparación con otros lenguajes como Java). Ejemplo. Creamos una clase llamada "Futbol" en estos tres distintos lenguajes con las siguientes propiedades:
  • nombreEquipo: String
  • victorias: int
  • derrotas: int
  • empates: int
  • golesAFavor: int
  • golesEnContra: int
  • golesGoleador
  • goleador: String
En Groovy no es necesario colocar ";" al final de una instrucción, además se puede definir variables con "def" o como se hace en Java (String, int, double,etc.). Al ser de tipo dinámico no es necesario definir el tipo de dato de una variable.
Futbol.groovy
class Futbol{ def nombreEquipo, goleador def victorias, derrotas,empates def golesAFavor, golesEnContra, golesGoleador // ... // ... }

Creamos una función que nos muestre los datos: def verDatos(){ println("Nombre del equipo: "+nombreEquipo) println("Nombre del goleador: "+goleador) println("No. de victorias: "+victorias) println("No. de derrotas: "+derrotas) println("No. empates: "+empates) println("No. goles a favor: "+golesAFavor) println("No. en contra: "+golesEnContra) println("Goles del goleador: "+golesGoleador) } 

Ahora definimos el método principal main, definimos un objeto llamado "miJugador" e invocamos el método verDatos()

//main static void main (String[] args){ def miJugador= new Futbol(nombreEquipo:'Real Madrid',goleador: 'Hugo Sánchez',victorias:12,derrotas:0,empates:0,golesAFavor:35,golesEnContra:6,golesGoleador:32) miJugador.verDatos() } 

Con Java evidentemente escribimos mucho más líneas de código (además las clases deben ser nombradas igual que el archivo):

  Futbol.java

public class Futbol{ 

/*En Java si es necesario declarar el tipo de dato de las variables*/ 


public String nombreEquipo, goleador; public int victorias, derrotas,empates; public int golesAFavor, golesEnContra, golesGoleador; /*constructor*/ 

 public Futbol(String nombreEquipo, String goleador,int victorias,int derrotas,int empates, int golesAFavor, int golesEnContra, int golesGoleador){ this.nombreEquipo=nombreEquipo; this.goleador=goleador; this.victorias=victorias; this.derrotas=derrotas; this.empates=empates; this.golesAFavor=golesAFavor; this.golesEnContra=golesEnContra; this.golesGoleador=golesGoleador; }

 // ... // aqui definimos los setters y getters public void setNombreEquipo(String nombreEquipo){this.nombreEquipo=nombreEquipo;} public String getNombreEquipo(){return this.nombreEquipo;} 

// ... 

 public void verDatos(){ System.out.println("Nombre del equipo: "+nombreEquipo); //... //... } 

 public static void main(String ... args){ Futbol miJugador=new Futbol("Real Madrid","Hugo Sánchez",12,0,0,35,6,32); miJugador.verDatos(); } } 

Finalmente tenemos el siguiente código en Python:

Futbol.py

class Futbol: def __init__(self,nombreEquipo,goleador,victorias,derrotas,empates,goleasAfavor, golesEnContra, golesGoleador): 

 self.nombreEquipo=nombreEquipo self.goleador=goleador self.victorias=victorias    self.derrotas=derrotas self.empates=empates self.golesAFavor=golesAFavor self.golesEnContra=golesEnContra self.golesGoleador=golesGoleador 

 def verDatos(self): 
  print "Nombre del equipo: ",self.nombreEquipo #... #...

 #main miJugador= Futbol("Real Madrid","Hugo Sánchez",12,0,0,35,6,32) miJugador.verDatos()

¿Cómo ejecutar los programas?

Groovy Compilar: groovyc Futbol.groovy Ejecutar: groovy Futbol.groovy Java Compilar: javac -g Futbol.java Ejecutar: java Futbol Python Compilar/ejecutar: python Futbol.py

Conclusiones

Java al ser un lenguaje fuertemente tipado obliga al programador a declarar tipos de datos a usar, además posee una gran cantidad de clases que lo hacen bastante robusto. Groovy es un lenguaje de tipo dinámico bastante fácil de aprender, puedes escribir código Java y funciona correctamente. Python posee características de tipo dinámico y estático.

  Códigos: Futbol.groovy Futbol.py Futbol.java



jueves, 26 de julio de 2012

Python ... ejemplos prácticos no. 6



Instalar Django


1. Descargar Django

2. Descomprimir e ir al directorio donde esta la carpeta Django

3. Desde la consola de comandos teclear:
python setup.py install

4. Comprobar instalación (desde la consola):

import django


print (django.get_version())



Instalar MySQLdb (Windows)

1. Descargar MySQLdb para Windows:
http://segaco.com/mysqldb-mysql-para-python-para-windows/

2. Descargar setuptools para Python:
http://pypi.python.org/pypi/setuptools 

3. Comprobar instalación:
import MySQLdb

Si NO sale nada, entonces ya se instaló correctamente.

También puedes ver otra forma (manual) para instalarlo:
http://fuyun.org/2009/12/install-mysql-for-python-on-windows/

martes, 24 de julio de 2012

Crea tus videojuegos con SimpleJ



Sitio oficial:  http://www.simplej.com/

Solo basta seguir las instrucciones  y  tutoriales que vienen en la página. 



Las imágenes pertenecen al sitio.


domingo, 22 de julio de 2012

Python ... ejemplos prácticos no. 5


5. 1. Ejemplo de clases y objetos:
#defino la clase y sus propiedades

class Heroe:
    def __init__(self,nombre,pais,poderes):
        self.nombre=nombre
        self.pais=pais
        self.poderes=poderes

    def getNombre(self):
        return self.nombre

    def getPais(self):
        return self.pais

    def getPoderes(self):
        return self.poderes


#main, defino las instancias
spiderman= Heroe("spiderman","USA",['sentido aracnido','fuerza de araña','super agilidad','trepar muros'])

#spiderman
#imprimo los datos
print type(spiderman)
print "\nHeroe: ",spiderman.getNombre()
print "\nPais: ",spiderman.getPais()
print "\nPoderes: " ## puede ser print "\nPoderes: ",spiderman.getPoderes  pero lo muestra como lista

for i in spiderman.getPoderes():
    print i



5.2 Horoscopoc chino mejorado:

#ahora uso diccionarios
animales={0:"mono",1:"gallo",2:"perro",3:"cerdo",4:"rata",5:"buey",6:"tigre",7:"conejo",8:"dragon",9:"serpiente",10:"caballo",11:"cabra"}
anyos=[1981,1990,1994,1998,2002,2006,2009,2012]
resto=0
print "\t[Horoscopo chino en Pyhton]"
for i in anyos:
    resto=i%12
    print "si naciste en: ",i,"  te correscpone el signo del: ",animales[resto]

5.3 Combinación y Permutación:

def factorial(x):
    if (x==0):
        return 1
    else:
        return x * factorial(x-1)

def permutacion(n,r):
    menor=0
    mayor=0
    if(n<r):
        menor=n
        mayor=r
    else:
        menor=r
        mayor=n

    return factorial(mayor)/factorial(mayor-menor)


def combinatorio(n,r):
    menor=0
    mayor=0
    if(n<r):
        menor=n
        mayor=r
    else:
        menor=r
        mayor=n

    return (factorial(mayor)/(factorial(mayor) * factorial(mayor-menor)))


print permutacion(10,9)
print combinatorio(10,9)


sábado, 9 de junio de 2012

Librerías ... Apache POI



Este post lo puedes ver también en http://www.javamexico.org/blogs/sr_negativo/aprendiendo_java_en_quotserioquot_008

Es una librería para el tratamiento de archivos de excel  y word desde programas Java.


CreaExcel.java
package org.programacion.task04;

import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;


public class CreaExcel {
    public static void main(String ... args)throws Exception{
     
     /*libro*/
     HSSFWorkbook miLibro= new HSSFWorkbook();
     /*hoja*/
     HSSFSheet hoja = miLibro.createSheet();
     /*fila*/
     HSSFRow fila = hoja.createRow(0);
     /*celda*/
     HSSFCell celda = fila.createCell((short) 0);
     /*contenido celda*/
     HSSFRichTextString texto = new HSSFRichTextString("Un simple mensaje");
     celda.setCellValue(texto);
     
     try{
      FileOutputStream archivo = new
        FileOutputStream("C:/Users/usuario/Documents/Programas/Ejemplos/archivoExcel.xls");
        miLibro.write(archivo);
        System.out.println("... archivo excel creado");
        archivo.close();
     }catch(Exception ex){
      System.err.println("error: ["+ex+"]  causa: ["+ex.getCause()+"]");
     }
     
    }
}



Debe generar un archivo de Excel

Y debe mostrar el mensaje: "Un simple mensaje"


 Ahora se me ocurre leer el contenido del archivo generado.

LeerExcel.java
package org.programacion.task04;

import java.io.FileInputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class LeerExcel{

 public static void main(String ... args)throws Exception{
  try{
   //Se abre el fichero Excel
   POIFSFileSystem fs =
   new POIFSFileSystem(
   new FileInputStream("C:/Users/usuario/Documents/Programas/Ejemplos/archivoExcel.xls"));
   //Se obtiene el libro Excel
   HSSFWorkbook wb = new HSSFWorkbook(fs);
   //Se obtiene la primera hoja
   HSSFSheet sheet = wb.getSheetAt(0);
   //Se obtiene la primera fila de la hoja
   HSSFRow row = sheet.getRow(0);
   
   //leer celda 0
   HSSFCell cell = row.getCell((short)0);
   System.out.println("[Lectura]");
   System.out.println("el mensaje dice: ["+cell.getStringCellValue()+"]");

   
  }catch(Exception ex){
   System.err.println("error: ["+ex+"]  causa: ["+ex.getCause()+"]");
  }
 }
}


Ahora un ejemplo con Word.Para esta aplicación se va usar además la librería log4j. 




log.properties
# root logger to DEBUG, and its only appender to A1
log4j.rootLogger=DEBUG, A1
# A1 se asigna a ConsoleAppender
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 usa PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

Esta es una configuración básica, nos permite hacer una "depuración sencilla".  Este ejemplo viene de Adictos al trabajo: Leer un documento de WORD usando la librería POI de jakarta.


AnalizadorWord.java
package org.programas.task01;

import java.io.FileInputStream;
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
import org.apache.poi.poifs.eventfilesystem.POIFSReader;

public class AnalizadorWord {
    
private int numeroCaracteres;
private int numeroPalabras;
private int numeroPaginas;
private String titulo;
private String autor;
private String comentarios;
private String texto;
private String nombreFichero;

public AnalizadorWord(String nombreFichero) {
this.nombreFichero = this.nombreFichero;
}

    
    
     static Logger log = Logger.getLogger(AnalizadorWord.class.getName());
    public static void main(String ... args){
      BasicConfigurator.configure();
      String filename = "C:/Users/usuario/Desktop/Documentos/Respaldo/Nueva info/ejemplo.doc";
      AnalizadorWord analizador = new AnalizadorWord(filename);

        log.info("... iniciando aplicación");
        try{
            analizador.analizar();
            log.info("... aplicación funcionando correctamente");
      }catch(Exception ex){
            log.error("error: ["+ex+"]  causa: ["+ex.getCause()+"]");
      }
    
    }//fin main
    
    
    @Override
    public String toString() {
StringBuffer sb = new StringBuffer("");
sb.append("\n TITULO DEL DOCUMENTO:"+getTitulo());
sb.append("\n AUTOR DEL DOCUMENTO:"+getAutor());
sb.append("\n COMENTARIOS DEL DOCUMENTO:"+getComentarios());
sb.append("\n NUMERO DE CARACTERES:"+getNumeroCaracteres());
sb.append("\n NUMERO DE PALABRAS:"+getNumeroPalabras());
sb.append("\n NUMERO DE PAGINAS:"+getNumeroPaginas());
sb.append("\n ------ TEXTO --------");
sb.append("\n");
sb.append(getTexto());
sb.append("\n ------ TEXTO --------");
return sb.toString();
}

    
    
 public void analizar() throws Exception {
      POIFSReader r1 = new POIFSReader();
      FileInputStream fis=null;
      StandardReaderListener stdReader = new StandardReaderListener();
      stdReader.setDatos(this);
      r1.registerListener(stdReader, "\005SummaryInformation");
   try {
        fis = new FileInputStream(this.nombreFichero);
        r1.read(fis);
        log.info("... leyendo archivo");
     } catch (Exception e) {
         log.error("Error->" + e.toString()+"   clase: "+AnalizadorWord.class.getName());
      } finally {
       if(fis!=null)
        fis.close();
     }
}


    /**
     * @return the numeroCaracteres
     */
    public int getNumeroCaracteres() {
        return numeroCaracteres;
    }

    /**
     * @param numeroCaracteres the numeroCaracteres to set
     */
    public void setNumeroCaracteres(int numeroCaracteres) {
        this.numeroCaracteres = numeroCaracteres;
    }

    /**
     * @return the numeroPalabras
     */
    public int getNumeroPalabras() {
        return numeroPalabras;
    }

    /**
     * @param numeroPalabras the numeroPalabras to set
     */
    public void setNumeroPalabras(int numeroPalabras) {
        this.numeroPalabras = numeroPalabras;
    }

    /**
     * @return the numeroPaginas
     */
    public int getNumeroPaginas() {
        return numeroPaginas;
    }

    /**
     * @param numeroPaginas the numeroPaginas to set
     */
    public void setNumeroPaginas(int numeroPaginas) {
        this.numeroPaginas = numeroPaginas;
    }

    /**
     * @return the titulo
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * @param titulo the titulo to set
     */
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    /**
     * @return the autor
     */
    public String getAutor() {
        return autor;
    }

    /**
     * @param autor the autor to set
     */
    public void setAutor(String autor) {
        this.autor = autor;
    }

    /**
     * @return the comentarios
     */
    public String getComentarios() {
        return comentarios;
    }

    /**
     * @param comentarios the comentarios to set
     */
    public void setComentarios(String comentarios) {
        this.comentarios = comentarios;
    }

    /**
     * @return the texto
     */
    public String getTexto() {
        return texto;
    }

    /**
     * @param texto the texto to set
     */
    public void setTexto(String texto) {
        this.texto = texto;
    }

    /**
     * @return the nombreFichero
     */
    public String getNombreFichero() {
        return nombreFichero;
    }

    /**
     * @param nombreFichero the nombreFichero to set
     */
    public void setNombreFichero(String nombreFichero) {
        this.nombreFichero = nombreFichero;
    }
    
}


StandardReaderListener.java

package org.programas.task01;

import java.io.FileInputStream;
import org.apache.poi.hpsf.PropertySetFactory;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;

public class StandardReaderListener implements POIFSReaderListener{
   static Logger log = Logger.getLogger(StandardReaderListener.class.getName());
    private AnalizadorWord datos=null;
 
    public void setDatos(AnalizadorWord datos) {
     this.datos = datos;
    }

 
    @Override
    public void processPOIFSReaderEvent(POIFSReaderEvent event) {
        // Clase que almacena las características estándar de un documento.
SummaryInformation si = null;
try {
si = (SummaryInformation)PropertySetFactory.create(event.getStream());
} catch (Exception ex) {
throw new RuntimeException ("Property set stream \"" +
event.getPath() + event.getName() + "\": " + ex);
}
/* Recogemos los datos que nos interesan y los almacenamos en la clase AnalizadorWord.*/
datos.setTitulo(si.getTitle());
datos.setAutor(si.getAuthor());
datos.setComentarios(si.getComments());
datos.setNumeroCaracteres(si.getCharCount());
datos.setNumeroPalabras(si.getWordCount());
datos.setNumeroPaginas(si.getPageCount());
/* Usamos la clase WordExtractor para obtener el texto del documento */
WordExtractor we = null;
try {
FileInputStream fis = new FileInputStream(datos.getNombreFichero());
we = new WordExtractor(fis);
fis.close();
} catch (Exception e1) {
log.error("Aqui parece el error"+e1.toString()+"   clase: "+StandardReaderListener.class.getName());
}
datos.setTexto(we.getText());

    }
 
}



Enlaces:
https://poi.apache.org/

Entendiendo el flujo MuleSoft

En la anterior entrega dijimos que MuleSoft es una plataforma de integración que te permite conectar aplicaciones, datos y APIs de mane...

Etiquetas

Archivo del blog