Java - S.O.S

Soy un estudiante de informática y ando un poco liado con Java; a ver si no te robo mucho tiempo y me puedes ayudar.
Te explico:
A mi me dan un fichero de texto, es este:
*********NOTAS.text*******************
Profesor: Txuma Mendiluze
Curso: 2003/2004
Titulación: Ingenieria Informatica
Grupo: 01
Notas
C111010101 Albizu Castro, Naiara 8.5
A101000101 Alday Tobalina, Augusto 7.5
C101111111 Allende Urrutia, Nuria 5.5
B101111101 Arroniz Goia, Reno 4.0
.
.
.
*************NOTAS.text**************
Entonces lo que me piden es:
1.- Leer las primeras 5 lineas de cabecera; y como quien dice pasar de ellas.
2.- Y luego me dicen que lea las lineas de las notas utilizando String Tokenizer porque solo me quiero quedar con los dos primeros bloques de las notas;es decir, en la primera línea sería:
C111010101 Albizu
El primer bloque indica:
C --> El grupo al que pertenece el alumno
Los 1 y 0 indican a las practicas que ha ido; es decir, 1 si ha ido a la practica y 0 indica que no ha ido a la practica;por lo tanto Albizu habrá ido a 6 clases de practicas.
3.- Entonces el resultado final de programa tiene que ser por pantalla:
"El estudiante ALBIZU asiste a 6 veces al grupo C de practicas"
Entonces; no se por donde me da el aire, no se como leer las 5 primeras lineas y luego a las sexta aplicar el StringTokenizer para poder hacer lo que me pide el ejercicio.
Por ello, si me pudieras ayudar te lo agradecería muchísimo;
Respuesta
1
String archivo = String.valueOf(request.getAttribute("file")).trim();
int index;
index = archivo.lastIndexOf("\\");
archivo = archivo.substring(index + 1).toLowerCase();
if (archivo == null || archivo.equals("")) {
request.setAttribute("mensaje", "No a seleccionado ningún Achivo.");
request.getRequestDispatcher("Carga.jsp").forward(request, response);
return;
}
ServletInputStream in = request.getInputStream();
int indexBoundary = request.getContentType().indexOf("boundary=");
String boundary = request.getContentType().substring(indexBoundary + 9);
carga(in, archivo, boundary,fecha,session);
public Vector carga(ServletInputStream in, String archivo, String boundary,java.util.Date fecha,HttpSession session) throws Exception
{
try
{
Vector vecCarga = new Vector();
int i=0;
/* Grabar en servidor web */
byte[] buffer = new byte[1024];
int count = 0;
int n;
String inputLine;
int length;
int iteracion = 0;
while (true) {
iteracion++;
if ( (length = in.readLine(buffer, 0, buffer.length)) < 0) {
throw new Exception("No se han recibido los datos correctamente");
}
inputLine = new String(buffer, 0, 0, length);
//Situamos el puntero en posician de lectura del archivo
if (inputLine.indexOf("filename=") >= 0) {
if ( (length = in.readLine(buffer, 0, buffer.length)) < 0) {
throw new Exception("No se han recibido los datos correctamente");
}
inputLine = new String(buffer, 0, 0, length);
break;
}
}
//Se establece el tamano maximo del archivo
byte fileBytes[] = new byte[1000000];
if (inputLine.indexOf("Content") >= 0) {
length = in.readLine(buffer, 0, buffer.length);
if (length < 0) {
throw new Exception("No se han recibido los datos correctamente");
}
inputLine = new String(buffer, 0, 0, length);
}
length = in.readLine(buffer, 0, buffer.length);
if (length < 0) {
throw new Exception("No se han recibido los datos correctamente");
}
inputLine = new String(buffer, 0, 0, length);
vecCarga.addElement(llenar(inputLine,1,fecha,session));
int offset = 0;
i=1;
while (inputLine.indexOf(boundary) < 0) {
i++;
System.arraycopy(buffer, 0, fileBytes, offset, length);
offset += length;
length = in.readLine(buffer, 0, buffer.length);
if (length < 0) {
throw new Exception("No se han recibido los datos correctamente");
}
if ( (offset + length) >= 1000000) {
throw new Exception("El archivo que usted intenta mandar es más grande de lo permitido. No se pueden enviar archivos mayores de " +
1 + "Mbytes");
}
inputLine = new String(buffer, 0, 0, length);
if(inputLine != null)
vecCarga.addElement(llenar(inputLine,i,fecha,session));
}
RandomAccessFile raf = new RandomAccessFile("/var/tmp/C" +General.formato(General.fechaActual(),"yyMMddmm")+archivo, "rw");
raf.write(fileBytes, 0, offset - 2);
return vecCarga;
}catch(Exception e)
{
return null;
}
}
Y para leer,seria asi:
String grupoAlumno = Line.substring(0,1).trim();
String CantPracticas = Line.substring(0,2).trim();
o si quieres sacar la primera palabra:
StringTokenizer palabra = new StringTokenizer(Line," ");
While(palabra.hasMoreElements())
{
String palabra1 = palabra.nextToken();
int cantPracticasTotal = palabra1.count -1 ;
//Luego haces un for y comparas si es igual a uno es q ha ido.
}

2 respuestas más de otros expertos

Respuesta
1
Para leer las lineas del fichero utiliza las clases FileReader y BufferedReader del paquete io.(Mira api de java en http://java.sun.com/j2se/1.4.2/docs/api/).Ejemplo:
Acceder al fichero:
FileReader f = new FileReader(pathFichero);
BufferedReader br = new BufferedReader(f);
Leer lineas fichero:
String s = br.readLine();
hasta que encuentres la linea que buscas.
Utilizar StringTokenizer:
StringTokenizer st = new StringTokenizer(s);
String t = s.nextToken();
'te devuelve t = "C111010101";
Para buscar el nº solo tienes que recorrer el String t con un bucle y cogiendo carácter a carácter y buscando unos o ceros:
t.charAt(i);
o con la función:
t.substring(indexinicial, indexfinal);
Me ha quedado alguna duda:
1.- importante: como utilizo en String Tokenizer para que solo me coja los dos primeros tokens del String
2.- Como se cual es cuando lee la linea que me interesa leer
venga;muchas gracias por tu tiempo;
Saludos
2-Tu sabes que las 5 primeras lineas del fichero es la cabecera, la sexta es en blanco, por lo tanto tienes que empezar a tratar a partir de la séptima linea del fichero.
1-Cuando en un StringTokenizer haces nextToken() te devuelve los caracteres hasta el primer token(en este caso el espacio en blanco) por lo tanto ya sabes que el primer nextToken() te devuelve 'C111010101', el segundo 'Albizu', el tercero 'Castro,', el cuarto 'Naiara' y el quinto '8.5'. Tratas el primero para saber la asistencia, el segundo, tercero y cuarto te dan el nombre y el ultimo la nota.
Al constructor del StringTokenizer le puedes pasar además del texto el separador de token (un espacio en blanco en este caso), por si no te devuelve los tokens antes descritos.
Respuesta
1
Me parece que no te voy a poder ayudar demasiado, ya que yo no he usado String Tokenizer.
Sin embargo, lo que creo que debes ir haciendo es ir leyendo lineas enteras. Con un entero (inicializado a cero) vas almacenando la linea en la que te encuentras en cada momento (es decir, cada vez que leas una linea incrementas el contador). Para las 7 primeras lineas no haces nada (desde la de los **** hasta la linea en blanco, anterior al primer alumno). De esta forma pasarías de la cabecera.
Para cada una de las lineas siguientes (y mientras no llegues al final del fichero): lees la linea, te posicionas en el primer carácter (linea[0]) y obtienes el grupo. A continuación con un bucle (de 1 a 9) te vas posicionando en la rista de 0 y 1 y cuentas las clases a las que ha ido. Por ultimo muestras la información por pantalla.
Espero que te sirva de algo, no te puedo facilitar código, porque como ya te he comentado, no he usado el Tokenizer.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas