2011-02-16 17 views

Respuesta

6

Probablemente no sea el más conciso posible, pero tal vez algo como lo siguiente?

(use 'clojure-csv.core) 

(doseq [file (.listFiles (File. "data/"))] 
    (if (.matches (.getName file) ".*[.]CSV$") 
    (doseq [[x y z] (parse-csv (slurp file))] 
     "... do whatever stuff you want with x, y, z...")))) 

N.B. usa la biblioteca clojure-csv.

Esto sería más elegante y más corto si pudiera encontrar una manera obvia para obtener una lista de directorios filtrada sin recurrir a expresiones regulares .... pero se me escapa por el momento

ACTUALIZACIÓN:

El enlace de Brian a Java support for globbing también es útil e interesante y ofrece un enfoque más general/robusto que las expresiones simples simples; sin embargo, depende de Java 1.7 (¿demasiado avanzado para algunos?) Y realmente no acorta mucho el código.

+2

http://download.oracle.com/javase/tutorial/essential/io/find.html describe el soporte de Java para globbing. Regex es probablemente más fácil. –

+0

hmmm Ya veo, sí, ¡la expresión regular parece más simple! parece un buen candidato para una función de contenedor útil ... ¿cree que sería bienvenido en clojure.contrib en algún lugar? – mikera

+0

@mikera: Gracias, acabas de eliminar mi deseo de probar Clojure. Me quedo con Ruby :) –

Cuestiones relacionadas