Tôi đang cố gắng để Clojure đọc một tệp, đặt dòng đầu tiên trong một biến và phần còn lại trong biến khác. tôi dường như không thể tìm ra cách để làm điều này và rất thích nếu có ai có thể cho tôi một người đứng đầu lên,Làm cho Clojure nhận biết và cô lập dòng trong một tệp
Trả lời
;; 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)]
...)
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.
- 1. Xóa một tệp lưu trữ bị cô lập
- 2. Trong Clojure 1.3, Cách đọc và viết một tệp
- 3. Thiết lập Slimv cho clojure
- 4. Cô lập và nhân instantiating một thư viện C trong quá trình
- 5. Làm cách nào để đặt mức cô lập giao dịch trong SQLAlchemy cho PostgreSQL?
- 6. Thử nghiệm Mô-đun rối trong cô lập với Jasmine
- 7. so sánh hai tệp và nhận kết quả cho cùng một dòng
- 8. thiết lập mức cô lập cho các thủ tục lưu trữ postgresql
- 9. thực hành tốt nhất cho DAL và cấu hình trên Multi-Tenant bị cô lập DB
- 10. Nhổ và Slurp một vector trong Clojure
- 11. Các công cụ để cô lập lỗi đập ngăn xếp
- 12. Lấy một callstack trong Clojure
- 13. Cách cô đọng/ngắn nhất để nối thêm một dòng mới vào một tập tin
- 14. Làm cách nào để bỏ đặt/đặt lại mức cô lập giao dịch cho SQL Server?
- 15. Tệp lớn trong Clojure và lỗi không gian heap Java
- 16. clojure làm thế nào để biết đường dẫn của một thư mục/tập tin/thư mục trong một dự án?
- 17. Sự hiểu lầm về bộ nhớ bị cô lập
- 18. Ảnh chụp một phần của tệp trong Vim: ẩn nhận xét và dòng trống
- 19. PYTHON nhận tệp từ dòng lệnh
- 20. mức cô lập giao dịch giải thích tốt
- 21. Lập và nhận một yêu cầu HTTP trong C#
- 22. Mã ký Ngắt kết nối Bộ nhớ bị cô lập
- 23. Thay thế chuỗi con nhận biết cú pháp
- 24. Android TextView và nhận dòng văn bản
- 25. Tìm kiếm văn bản theo định dạng trong một tệp PDF và cho biết số trang?
- 26. SQL Server: làm thế nào để thiết lập mức cô lập mặc định cho toàn bộ thủ tục lưu sẵn?
- 27. Lập trình nhận biết bộ nhớ cache C++
- 28. Sửa đổi tệp mã nguồn Clojure trong clojure
- 29. Đọc một dòng tệp theo dòng VB.NET
- 30. Lập trình "DSL" của Clojure
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
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
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