让Clojure识别并隔离文件中的行

时间:2010-07-03 20:27:03

标签: file clojure variables io stream

我试图让Clojure读取一个文件,将第一行放在变量中,其余的放在另一个变量中。 我似乎无法找到如何做到这一点,如果有人能给我一个抬头,我会很高兴,

2 个答案:

答案 0 :(得分:4)

;; for Clojure 1.1
(require '[clojure.contrib.duck-streams :as io])
;; for bleeding edge
(require '[clojure.java.io :as io])

(with-open [fr (io/reader "/path/to/the/file")]
  (let [[first-line & other-lines] (doall (line-seq fr))]
    ;; do stuff with the lines below...
    ...))

更新:啊,刚才意识到我把问题中的“其余部分”改为“文件中的其余部分”,因此上面的other-lines是一个seq除了第一行之外的所有行。

如果您需要“包含文件内容其余部分的字符串”,您可以使用上面的代码,然后使用(require '[clojure.contrib.str-utils2 :as str]) / (require '[clojure.string :as str])(取决于您使用的Clojure版本)并说(str/join "\n" other-lines)other-lines重新加入一个字符串;或者,使用类似的东西:

(let [contents (slurp "/path/to/the/file")
      [first-line rest-of-file] (.split #"\n" contents 2)]
  ...)

答案 1 :(得分:2)

Clojure负责人:

(require '[clojure.string :as str])
(let [[f & r] (str/split (slurp "foo.txt") #"\n")]
   ... do something with f and r ...)
ED:不知怎的,我没有认出Michał的答案,并考虑删除它,但由于它有点不同而且显示了clojure.string.split,我不会。