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

Я новичок в кложуре. У меня возникли проблемы с выводом определенной строки после удаления специальных символов и построчного чтения файла clojure.
У меня есть файл с именем example.clj, который выглядит так:

(defn patient 
"Some string"

(measures 
patient/symptom-fever
patient/symptom-cold
.
.
.
.
patient/symptom-bp))

Из приведенного выше файла я удалил все специальные символы и прочитал файл построчно с приведенным ниже кодом clojure.

(defn loadcljfile []
  (def newstring(clojure.string/replace (slurp "C:/Users/Desktop/example.clj") #"[\[/.(:)\]-]" " "))
  (with-open [rdr (reader newstring)]
  (doseq [line (line-seq rdr)]
   (println line))))
  (loadcljfile)

Теперь не понимаю, как напечатать пациента, то есть мое имя и все меры.

Может кто-нибудь помочь мне?

Спасибо


person Sachin M    schedule 25.06.2018    source источник
comment
Каждый допустимый файл clojure можно рассматривать как структуру данных, поэтому нет особого смысла работать с ним, как с простой последовательностью строк. Я должен использовать org.clojure/tools.reader здесь, а затем пройтись по этой структуре данных, например, с specter.   -  person akond    schedule 25.06.2018


Ответы (1)


при определении вещей с именами внутри функции гораздо безопаснее и проще использовать let, а не def. def определяет его для всего пространства имен (обычно всего файла) и позволяет дать чему-то имя только до закрытия).

В этом случае имеет смысл позволить Clojure прочитать выражение и превратить его в структуру данных для вас. вы можете сделать это с помощью функции загрузки файла, если ваш файл является функцией, которую вы хотите запустить, или использовать tools.reader, если вы просто хотите иметь его в структуре данных.

если вы выберете подход загрузки файла, вы можете распечатать его с помощью функции clojure.repl/source, а если вы перейдете по пути tools.reader, вы можете просто распечатать его.

person Arthur Ulfeldt    schedule 25.06.2018