Clojure에서 이와 같은 작업을 수행하는 가장 쉬운 방법은 무엇입니까?루비의 Dir.glob()에 대해 가장 간결한 Clojure는 무엇인가?
require 'csv'
Dir["data/*.csv"].each do |file|
File.readlines(file).each do |line|
x, y, z = *CSV.parse_line(line)
# process this data
end
end
Clojure에서 이와 같은 작업을 수행하는 가장 쉬운 방법은 무엇입니까?루비의 Dir.glob()에 대해 가장 간결한 Clojure는 무엇인가?
require 'csv'
Dir["data/*.csv"].each do |file|
File.readlines(file).each do |line|
x, y, z = *CSV.parse_line(line)
# process this data
end
end
이것은 내가 본 가장 짧다 :
(require '[clojure.java.io :as io])
(filter #(.endsWith (.getName %) ".csv") (file-seq (io/file dir))))
아마도 가장 간결한 것은 아니지만 아마도 다음과 같은 것이 있을까요?
(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 (일부 코드에 대해서는 최전선에 달려 있습니까?)에 따라 달라 지므로 코드를 많이 단축하지는 않습니다.
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. 정규식은 아마 더 쉽습니다. –
hmmm 알겠습니다 - 예 정규식이 더 단순 해 보입니다! 편리한 래퍼 (wrapper) 기능을위한 좋은 후보자처럼 보입니다 .... 당신은 clojure.contrib 어딘가에서 환영받을 것이라고 생각합니까? – mikera
@mikera : 감사합니다. Clojure를 사용해 보려는 욕심을 없앴습니다. 나는 루비와 함께 머물고있다. –
당신은 잊었다 : io가 필요하다. – cldwalker
감사합니다, 방금 예를 업데이트했습니다 :) –