Mostrando las entradas con la etiqueta J2SE. Mostrar todas las entradas
Mostrando las entradas con la etiqueta J2SE. Mostrar todas las entradas

domingo, 3 de enero de 2010

Lecturas de Estado en ORCE Usando Java SE

No pude evitar la curiosidad. Aprovechando mis últimos momentos de descanso quise probar lo mismo que ayer pero usando Java en vez de Python. Quiero aclarar que no se está haciendo ninguna consulta a base de datos sino trabajar con el código HTML obtenido de las URL's invocadas. Ahí va el código:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.io.File;
import java.io.FileReader;

public class Lector {
public static void main(String[] args) {

File f = new File( "\\codigos.txt" );
BufferedReader entrada;
try {
entrada = new BufferedReader( new FileReader( f ) );
String codigo;
int eg=0,ba=0,ti=0,su=0,re=0 ;
while(entrada.ready()){
codigo = entrada.readLine();

URL url = new URL("http://www.orce.uni.edu.pe/detaalu.php?id="+codigo+"&op=detalu");
URLConnection urlConnection = url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = bufferedReader.readLine();
String nombre = null;
String condicion = null;

while (line != null) {

if (line.equals("      <td style=\"font-weight: bold;\"><img src=\"/images/flechita.gif\"> Nombres:</td>")){
line = bufferedReader.readLine();
nombre = line.replace("", "").replace(" ", "").replace(" ", "-").replace("", "");
if(nombre.charAt(nombre.length()-1)=='-'){
nombre= nombre.replace(nombre, nombre.substring(0,nombre.length()-1));
}
}
if (line.equals("      <td style=\"font-weight: bold;\"><img src=\"/images/flechita.gif\"> Situación:</td>")){
line = bufferedReader.readLine();
condicion = line.replace("", "").replace(" ", "");
if (condicion.equals("BACHILLER"))
ba=ba+1;
if (condicion.equals("SUSPENSION VOLUNTARIA"))
su=su+1;
if (condicion.equals("EGRESADO"))
eg=eg+1;
if (condicion.equals("TITULADO"))
ti=ti+1;
if (condicion.equals("EN REGULARIZACION DE CURSO(S)"))
re=re+1;

}
line = bufferedReader.readLine();
}
bufferedReader.close();
System.out.println(nombre+": "+condicion);
}
System.out.println("");
System.out.println("RESULTADOS");
System.out.println("");
System.out.println("TITULADOS: "+ti);
System.out.println("BACHILLERES: "+ba);
System.out.println("EGRESADOS: "+eg);
System.out.println("EN REGULARIACION DE CURSO: "+re);
System.out.println("SUSPENSIONES VOLUNTARIAS: "+su);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}}}
Al correr este código se imprime lo siguiente en la consola de Eclipse:

Y también las cantidades de cada estado:

Definitivamente en Python se requiere de menos código, de todas maneras si alguien puede mejorar el código bienvenido sea, seguro que así será. Chau vacaciones.

Nota: Por si acaso, descarga la fuente aquí. Usa tu propio .txt, no lo olvides.

domingo, 25 de noviembre de 2007

Canillita Simulation v1.0

Si no fuera por el curso de Simulación ya no hubiese retornado al mundo Cliente-Servidor de Java. Y fue duro acoplarse nuevamente a cosas que ya no hacía: JPanel, Container, ActionListener, etc. Eso sí, fracasé al recordar JTable pues es difícil comprender el TableModel bajo presión teniendo que hacer miles de cosas más para otras actividades.

Pero bueno, explico el modelo del aplicativo: Un canillita pide cierta cantidad de periódicos para vender. Recibe X soles por venta y Y soles por ediciones no vendidas (que serán devueltas al editorial proveedor). El modelo busca simular las ganancias del canillita, en un determinado espacio de tiempo en días, bajo el supuesto que la ventas poseen una distribución probabilística (aquí obviamente es importante usar el Random). De esta manera para varios periodos, medidos como días, se podrá conocer cuál es la cantidad preferible que el canillita deberá ordenar para obtener más ganancias.

Si te da flojera, puedes oprimir el botón "El Óptimo" para obtener ese maldito número que te ahorrará ejecutar 10000 pruebas, o sea, 10000 veces hacer click en "A Simular".

Ahora toca revisar JTable para mostrar reportes (hace 2 años que no programo en J2SE). Mil disculpas a los amantes de la "amigabilidad" y "trazabilidad" pero no hay tiempo para detalles de diseño. Me quedo con la "funcionalidad", y funciona.