Foros del Web » Programación para mayores de 30 ;) » Java »

Parsear un archivo de texto

Estas en el tema de Parsear un archivo de texto en el foro de Java en Foros del Web. Hola, Me encuentro desarrollando un proyecto que consiste en la lectura , transformación , y carga (sobre una base de datos). El archivo tiene un ...
  #1 (permalink)  
Antiguo 08/11/2013, 20:47
 
Fecha de Ingreso: junio-2008
Ubicación: Bogotá Colombia
Mensajes: 45
Antigüedad: 16 años, 5 meses
Puntos: 0
Parsear un archivo de texto

Hola,

Me encuentro desarrollando un proyecto que consiste en la lectura, transformación, y carga (sobre una base de datos). El archivo tiene un formato como el que sigue.


TipoFila1;Codigo;SubCodigo;NombreApellido;Apellido ;Direccion;Ciudad;Pais;SaldoAnterior;FechaInicialM ovimiento;FechaFinalMovimiento;Espacios;
TipoFila2;FechaDocumento;Documento;Numero;Transacc ion;DetalleTransaccion;Detalle;ValorDebito;ValorCr edito;Saldo;
TipoFila3;TotalDebitos;TotalCreditos;TotalSaldoAct ual;TotalArrendamientos;TotalComisiones;TotalOtros ;Espacios;
TipoFila4;Observacion1;Observacion2;Email;Espacios ;


Detalles:
  • Los campos son diferentes por cada fila.
  • Las filas TipoFila2, y TipoFila3 se pueden repetir n veces.
  • El separador es el punto y coma
  • Cada fila tiene un número diferente de campos.

He creado un código sin utilizar ninguna librería o framework para este tipo de tratamiento de archivos de texto. El código básicamente consiste en leer el archivo de texto e identificar el tipo de fila que estoy leyendo a través del primero campo de cada tipo de fila (TipoFila1, TipoFila2, TipoFila3, y TipoFila4).

El problema más grave que tengo actualmente con el código es de uso eficiente de memoria, debido a que al heap se queda sin capacidad después de tener cientos de cadenas de caracteres almacenadas en un ArrayList.


Me gustaría recibir comentarios, sugerencias, o cualquier elemento que me guíe en esta tarea de parseo.

Gracias de antemano.

Saludos,
  #2 (permalink)  
Antiguo 09/11/2013, 03:51
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Parsear un archivo de texto

Hola:

"cientos de cadenas", pongamos 900 para que no sean miles. Las cadenas más larqa que has puesto tiene 142 caracteres, pongamos 200 para redondear, quedan 900x200= 180000 caractes. En java un caracter son 2 bytes, asi que tenemos 360000 bytes, no llega a medio mega.

El heap por defecto de java es de 128 megas, del cual estás gastando medio mega. No creo que el problema de falta de espacio venga por temas de cadenas.

Habitualmente, el heap se sobrepasa por dos motivos:
- Cantidad ingente de datos o programas java muy grandes. Echa una cuenta con los datos que manejas en memoria para ver si al menos se aproxima a esos 128 Megas.
- Algún error que provoca llamada recursiva a métodos sin fin. Por ejemplo, si en un método() prentendes llamar a super.metodo() y te olvidas de poner super, el método se llama a si mismo hasta el infinito, o recursiones en que la salida de la recursión está fallando. O algún bucle que almacena datos y no termina nunca (por ejemplo, en tu caso podría ser algo como procesar una y otra vez la misma línea del fichero por algún fallo).

Para el primer caso, basta con dar más memoria al arrancar la máquina virtual, por ejemplo

java -Xmx512m ....

haría que tuvieras 512 megas en vez de 128.

Esta solución no sirve en el segundo caso, si tienes un problema de llamadas recursivas o de almacenamiento infinito de datos por algún error, al aumentar la capacidad de memoria, el error tardará un poco más en darse pero seguirá dándose.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: parsear, transformar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:08.