2010-01-27 12 views
6

EDITAR: Estoy principalmente analizando "valores separados por comas", fuzzy trajo ese término a mi atención.¿Sugerencias para escribir un analizador de archivos en Java?

Interpretar los bloques de CSV es la pregunta principal aquí.

sé cómo leer el archivo en algo así como un String[] y algunas de las características básicas de String, pero no creo que el uso de métodos como y analizar todo carácter por carácter va a funcionar.

¿De qué manera puedo hacer esto de una manera más inteligente?

Ejemplo de una línea:

-barfoob: boobs, foob, "foo bar"

+3

¿Es el formato XML válido? – SLaks

+0

Mantenga los errores fuera del código. –

+0

No, no estoy siguiendo ninguna norma ni voy a usar XML; simplemente complicaría las cosas innecesariamente. – defectivehalt

Respuesta

6

Dado que la entrada es "con formato similar a HTML", entonces es probable que sus datos se representa mejor mediante una estructura en forma de árbol, y también , es probable que sea XML o similar a XML.

Si este es el caso, propongo que la forma más inteligente de analizar su archivo es utilizar un analizador XML.

Estos son algunos recursos que pueden ser útiles:

HTH

+0

Los datos no son XML y si lo fueran, se verían terribles y no serían amigables para los humanos. – defectivehalt

0

Puede usar el Neko HTML parser hasta cierto punto. Depende de cómo maneja el HTML no estándar.

1

Dependiendo de lo complicado que sea su "esquema", una expresión regular puede ser lo que desee. Si hay un montón de anidamiento, entonces podría ser más fácil convertirlo a XML o JSON y usar un analizador precompilado.

0

Si el XML es válido, personalmente prefiero usar http://www.xom.nu simplemente porque tiene un buen modelo de DOM. Como se señaló, sin embargo, hay analizadores en J2SE.

+0

¿Qué demonios está mal al agregar una preferencia por una biblioteca XML? –

2

Si el documento es XML válido, entonces cualquiera de las demás respuestas funcionará. Si no es así, tendrás have to lex.

7

Existe una razón por la que todos asumen que se trata de XML: inventar un formato de archivo basado en texto patentado requiere muy fuerte justificación frente a la madurez y fácil disponibilidad de los analizadores XML.

Y su pregunta indica que tiene muy poco conocimiento previo acerca de programas de análisis (de lo contrario estaría escribiendo un ANTLR o JavaCC gramática en lugar de hacer esta pregunta) - que es otro argumento de peso para que no ruede su cuenta, excepto como un aprendizaje experiencia.

+0

Bueno, sí, es principalmente una experiencia de aprendizaje. El aspecto de propiedad también está muy justificado. – defectivehalt

2

debe mirar ANTLR incluso si desea escribir el analizador usted mismo, ANTLR es una gran alternativa.O al menos mira YAML

1

La gente tiene razón acerca de que los formatos estándar son las mejores prácticas, pero dejemos eso de lado.

Asumiendo que el ejemplo que da es representativo, la tarea es bastante trivial.

Muestra una línea con un token inicial, marcado con un espacio de dos puntos, luego una lista de valores separados por comas. Separe en ese primer espacio de dos puntos, y luego use split() en la parte de la derecha. El manejo de las citas también es trivial.

1

Después de mirar a su entrada de la muestra, no veo ningún parecido a HTML o XML:

-barfoob: boobs, foob, "foo bar"

Si esto es lo que desea analizar, tengo una sugerencia alternativa, utilizar el Java el analizador de propiedades (viene con Java estándar), y luego analiza el resto de cada línea usando su propio código personalizado. Necesitará refactorizar su formato un poco para que esto funcione, por lo que depende de usted.

barfoob=boobs, foob, "foo bar"

propiedades Java serán ser capaz de volver barfoob como el nombre de la propiedad, y boobs, foob, "foo bar" como el valor de la propiedad. Ahí es donde puede usar su código personalizado para dividir el valor de la propiedad en boobs, foob y foo bar.

1

me aconsejo fuertemente a no reinventar la rueda y el uso de una solución existente como Flatworm, Fixedformat4j o jFFP que todos puedan analizar archivos valores posicionales o separados por comas (personalmente, recomiendo Flatworm).

Cuestiones relacionadas