2013-09-25 2 views
3

Используя код из this answer, яПрочитать файл в clojure и игнорировать первую строку?

(defn repeat-image [n string] 
    (println (apply str (repeat n string)))) 

(defn tile-image-across [x filename] 
    (with-open [rdr (reader filename)] 
    (doseq [line (line-seq rdr)] 
     (repeat-image x line)))) 

... замостить ASCII-изображение по горизонтали. Теперь, как я мог бы «игнорировать» первую строку? Причина, по которой я делаю это, - это каждое изображение имеет координаты (например, «20 63») в качестве первой строки, и мне не нужна строка. Я пробовал несколько способов (сохраняя индекс, сопоставляя шаблоны), но мои подходы были надуманными.

ответ

6

Предполагая, что вы хотели бы, чтобы пропустить первую строку файла и обработать оставшиеся строки, как вы в tile-image-across, вы можете просто заменить (line-seq rdr) с

(next (line-seq rdr)) 

В самом деле, вы, вероятно, следует учитывать из ыбор соответствующие строки и обработка:

;; rename repeat-image to repeat-line 

(defn read-image [rdr] 
    (next (line-seq rdr))) 

(defn repeat-image! [n lines] 
    (doseq [line lines] 
    (repeat-line n line))) 

Использование внутри with-open:

(with-open [rdr ...] 
    (repeat-image! (read-image rdr))) 

Если вместо этого файл содержит несколько изображений, и вам нужно пропустить первую строку каждого из них, лучшим способом было бы написать функцию для разделения seq строк на несколько изображений (как это было бы сделано, зависит от формат файла), а затем карту, что над (line-seq rdr) и (map next ...)) над результатом:

(->> (line-seq rdr) 
    ;; should partition the above into a seq of seqs of lines, each 
    ;; describing a single image: 
    (partition-into-individual-image-descriptions) 
    (map next)) 

NB. с ленивым partition-into-individual-image-descriptions это произведет ленивый ряд ленивых секций; вам нужно будет их использовать до того, как with-open закроет читателя.

+0

Удивительно, спасибо за подробный ответ! – Emil

+0

Чтобы уточнить, каждое изображение находится в отдельном файле. – Emil

Смежные вопросы