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

Como parsear esto.

Estas en el tema de Como parsear esto. en el foro de Java en Foros del Web. Hola sucede que me pondran un archivo el cual seguro tendra miles de registros, y cada registro tendra 3 campos: NOMBRE, PAIS, CONTACTO, el archivo ...
  #1 (permalink)  
Antiguo 05/07/2011, 01:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 41
Antigüedad: 13 años, 6 meses
Puntos: 0
Como parsear esto.

Hola sucede que me pondran un archivo el cual seguro tendra miles de registros, y cada registro tendra 3 campos: NOMBRE, PAIS, CONTACTO, el archivo vendra algo asi EJ:

Código HTML:
Ver original
  1. NOMBRE                                        PAIS                                    CONTACTO
  2. Industria algodonera                          chile                                   juan perez
  3. ACER                                          estados unidos                          john smith
  4. H P                                           usa                                     juan de la cruz
Imaginense miles de registros asi, pero lo que no logro hacer es la logica de como parsear esto, debido a que entre un campo y otro no existe un separador ya definido como un punto y coma o algo asi, y la cantidad de espacios varia entre un campo y otro, entonces Necesito si alguien me pudiera mas o menos explicar la logica de como lograr esto. De antemano mil gracias.
  #2 (permalink)  
Antiguo 05/07/2011, 01:22
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años
Puntos: 17
Respuesta: Como parsear esto.

Puedes probar con lastIndexOf(int ch), y luego un substring y trim para eliminar espacios.

Saludos
  #3 (permalink)  
Antiguo 05/07/2011, 01:23
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 10 meses
Puntos: 306
Respuesta: Como parsear esto.

Yo haría lo siguiente,

como la columna central es de países (no serán muchos), crearia una lista con ellos y la utilizaría como separador para los otros dos campos. Para eso no te queda más remedio que echar un vistazo por encima al fichero, y luego con un método haría que me mostrara las líneas en las que no encuentra el país para corregir la lista.

No es muy eficiente, pero cuando los datos no están bien definidos solo se puede hacer este tipo de trucos. En tu caso, entre que no hay un separador, y que en los campos pueden aparecer espacios, no hay muchas opciones.

Otra posibilidad podría ser buscar dos espacios o más como separador (se puede hacer), pero tendrías que estar seguro de que dentro de un campo nunca va a haber dos espacios entre palabras.

Mejor que las otras posibilidades, si cada campo empieza en una misma posición de caracter (como parece en el ejemplo que has puesto), no tienes problema, solo tienes que hacer substring hasta donde empieza el siguiente campo.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 05/07/2011, 01:41
 
Fecha de Ingreso: septiembre-2010
Mensajes: 41
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Como parsear esto.

Muchas gracias, la verdad lo que mejor podria hacer es lo que dice Xerelo, hacer un Substring hasta donde empieza el siguiente campo. Ojala me funcione bien..
  #5 (permalink)  
Antiguo 05/07/2011, 04:35
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 3 meses
Puntos: 21
Respuesta: Como parsear esto.

Yo estoy haciendo algo aprecido, si te sirve este codigo:

Código PHP:
Ver original
  1. public static void main(String[] args) throws IOException {
  2.  
  3.         Main2 listaAntigua=new Main2();
  4.         FileInputStream fstream = new FileInputStream("C:/Users/hwsol/Documents/NetBeansProjects/JavaApplication4/catalogos.txt");
  5.         InputStreamReader fichero = new InputStreamReader(fstream, "UTF-8");
  6.         //DataInputStream in = new DataInputStream(fichero);        
  7.         BufferedReader br = new BufferedReader(fichero);
  8.     String strLine;
  9.         List<String> los_catalogos =  null;
  10.         String clave;
  11.         while ((strLine = br.readLine()) != null )   {
  12.             clave=null;
  13.             los_catalogos= new ArrayList<String>();
  14.             StringTokenizer st = new StringTokenizer(strLine, "\t");
  15.             //System.out.println("numero"+st.countTokens());
  16.             clave=st.nextToken();
  17.             //System.out.println("clave"+clave);
  18.             while (st.hasMoreTokens()){            
  19.                 String siguiente=st.nextToken();
  20.                 los_catalogos.add(siguiente);
  21.             }
  22.             listaAntigua.textosAntiguos(clave,los_catalogos);
  23.             System.out.println("SIGUIENTE");
  24.          }
  25.     }

Aqui yo el archivo lo pase de una hoja excel a un .txt, por lo que automaticamente te lo speara por tabuladores y con esta linea:
StringTokenizer st = new StringTokenizer(strLine, "\t");
te los divine las tabulaciones

Saludos

Última edición por sirdaiz; 05/07/2011 a las 04:42

Etiquetas: parsear, parser, registros
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 08:12.