2011-02-16 2 views

답변

8

이것은 내가 본 가장 짧다 :

(require '[clojure.java.io :as io]) 

(filter #(.endsWith (.getName %) ".csv") (file-seq (io/file dir)))) 

+1

당신은 잊었다 : io가 필요하다. – cldwalker

+0

감사합니다, 방금 예를 업데이트했습니다 :) –

6

아마도 가장 간결한 것은 아니지만 아마도 다음과 같은 것이 있을까요?

(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. clojure-csv 라이브러리를 사용합니다.

이 나는 ​​정규 표현식에 의지하지 않고 필터링 된 디렉토리 목록을 얻을 수있는 확실한 방법을 찾을 수있는 ....하지만이 순간

UPDATE 저를 회피한다하면 더 우아하고 짧은 것 :

브라이언의 Java support for globbing에 대한 링크도 유용하고 흥미로 우며 간단한 정규식보다 더 일반적인/강력한 접근법을 제공합니다. 그러나 Java 1.7 (일부 코드에 대해서는 최전선에 달려 있습니까?)에 따라 달라 지므로 코드를 많이 단축하지는 않습니다.

+2

http://download.oracle.com/javase/tutorial/essential/io/find.html https://github.com/brentonashworth/one/blob/master/src/lib/clj/one/reload.clj#L28에서하는 Java 지원에 대한 설명 globbing. 정규식은 아마 더 쉽습니다. –

+0

hmmm 알겠습니다 - 예 정규식이 더 단순 해 보입니다! 편리한 래퍼 (wrapper) 기능을위한 좋은 후보자처럼 보입니다 .... 당신은 clojure.contrib 어딘가에서 환영받을 것이라고 생각합니까? – mikera

+0

@mikera : 감사합니다. Clojure를 사용해 보려는 욕심을 없앴습니다. 나는 루비와 함께 머물고있다. –

관련 문제