Size: a a a

Clojure — русскоговорящее сообщество

2021 September 01

v

vveare138 in Clojure — русскоговорящее сообщество
> хотел узнать какие подходы тут можно использовать.

ну как вариант 🙂
источник

T

Tim in Clojure — русскоговорящее сообщество
тоже хороший вариант, спасибо.
источник

T

Tim in Clojure — русскоговорящее сообщество
имею в виду сконвертить файл рубями и отдать json в кложу
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
вариантов масса, но все упирается с парсерами обычно в три варианта. Объясню на примере XML: DOM, SAX и Stax. Полный парсинг со всей грамматикой - DOM, быстро по тегам - SAX, быстро по тегам с заходом в потрошка - Stax.
источник

T

Tim in Clojure — русскоговорящее сообщество
спасибо! примечание: это пет-проект, подумалось, что наконец-то интересные макросы на кложе напишу. но похоже не судьба =).
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
было дело, на заре компухтерного времени, году в 2004-м делали парсер RTF, было весело. Отталкивались от парсера, который в JDK изначально, но под конец проекта, там вообще от оригинала ничего от него не осталось :)
источник

T

Tim in Clojure — русскоговорящее сообщество
о, это вы красиво в три предложения объясняли подходы парсинга =)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
(defn- find-livecheck-url
 [source]
 (->> (string/split-lines source)
      (drop-while #(not (string/starts-with? (string/triml %) "livecheck")))
      (some #(let [[label value] (string/split (string/triml %) #"\s+")]
               (when (= label "url") value)))
      (read-string)))
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
нууу... а потрындеть?! смотришь так сериал, а тут  спойлеры :)
источник

T

Tim in Clojure — русскоговорящее сообщество
это прекрасно, спасибо 🥃
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
трындеть же предметно нужно
залезешь в репл, вот тебе и спойлер
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
тогда покритикую, кажется такой код обработает неправильно
livecheck
....
end
...
url
источник

T

Tim in Clojure — русскоговорящее сообщество
там много нюансов, но идею Сергей описал кажется достаточно. дальше я уже усложню логику =)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
вот так пооптимальней будет, без промежуточного вектора со строками
(defn- find-livecheck-url
 [source]
 (->> (re-seq #".+\r?\n" source)
      (drop-while #(not (string/starts-with? (string/triml %) "livecheck")))
      (some #(let [[label value] (string/split (string/triml %) #"\s+")]
               (when (= label "url") value)))
      (read-string)))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
лайвчек может быть без урла?
источник

T

Tim in Clojure — русскоговорящее сообщество
нет, он с урлом всегда
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
take-while значит добавить, чтобы дальше end не заходило 😊
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
можно ещё усложнить регулярку и упростить обработку
(defn- find-livecheck-url
 [source]
 (->> (re-seq #"\s*(\w+)\s+(.+)\r?\n" source)
      (drop-while (fn [[_ label]] (not= label "livecheck")))
      (some (fn [[_ label value]] (when (= label "url") value)))
      (read-string)))
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
а можно и такой подход
(def replacements {#"livecheck do" "{"
                  #"url" ":url"
                  #"(?is)strategy.*" "}"})

(->> replacements
    (reduce (fn [s [from to]]
              (str/replace s from to))
            (slurp "/tmp/livecheck.rb"))
    edn/read-string
    :url)
источник