2010-07-03 13 views

Trả lời

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... 
    ...)) 

Cập nhật: Ah, chỉ cần nhận ra rằng tôi mất "phần còn lại" từ các câu hỏi để có nghĩa là "phần còn lại của các dòng trong tệp", do đó, ở trên other-lines là một seq của tất cả các dòng trong tệp ngoại trừ tệp đầu tiên.

Nếu bạn cần "một chuỗi chứa phần còn lại của nội dung của tập tin" thay vào đó, bạn có thể sử dụng đoạn mã trên, nhưng sau đó (require '[clojure.contrib.str-utils2 :as str])/(require '[clojure.string :as str]) (tùy thuộc vào phiên bản của Clojure bạn đang sử dụng) và nói (str/join "\n" other-lines) tái gia nhập other-lines thành một chuỗi; hoặc, cách khác, sử dụng một cái gì đó như thế này:

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

Clojure đầu:

(require '[clojure.string :as str]) 
(let [[f & r] (str/split (slurp "foo.txt") #"\n")] 
    ... do something with f and r ...) 

ED: Bằng cách nào đó tôi thất bại trong việc nhận ra câu trả lời Michał và nghĩ về việc xóa nó, nhưng kể từ đó là một chút khác nhau và cho thấy clojure .string.split, tôi sẽ không.

+0

khi tôi xuất tệp này vào một tệp mà tôi nhận được rất nhiều [\ bên trong tệp. Bạn có biết tại sao? – bleakgadfly

+0

Trong giải pháp này, chuỗi được trả về bởi slurp được chia thành các dòng. Điều đó có nghĩa là, (str/split str # "\ n") sẽ trả về một vectơ các dòng. Sau đó, dòng đầu tiên được liên kết với f, và phần còn lại của vectơ thành r. Xem thêm đoạn thứ hai của câu trả lời của Michał. – danlei

+0

tôi đã thử giải pháp của bạn và đã làm một (println (str f r)). Dòng đầu tiên là hoàn hảo nhưng phần còn lại là trong các dấu ngoặc đơn (typo) và dấu ngoặc kép. như thế này: Đây là dòng đầu tiên. ("" "Và đây là" "các dòng khác"). Bất kỳ cách nào để thoát khỏi các dấu ngoặc và dấu ngoặc kép? Không thể thấy cách giải pháp của Michaels giải quyết vấn đề đó. – bleakgadfly

Các vấn đề liên quan