Clojure: преобразование файла Clojure в YAML - PullRequest
6 голосов
/ 27 мая 2011

Как бы вы конвертировали исходный файл clojure в YAML? Я использовал библиотеку clj-yaml , чтобы сделать это в интерактивном REPL, но я хотел бы автоматизировать это, чтобы я мог передать входной файл и указать вывод, то есть:

clj2yaml input.clj > output.yml 

Ответы [ 2 ]

4 голосов
/ 01 июня 2011

Насколько я понимаю, вам нужна помощь для чтения и записи файлов ?! См. slurp и spit . Реальный пример чтения файла конфигурации YAML и его анализа с помощью clj-yaml см. В pswincom.gateway.config .

.

А вот реализация простого инструмента clojure для преобразования:

(ns sample
    (:require [clj-yaml.core :as yaml]))

(->> (slurp (nth *command-line-args* 0))
     read-string ; converts the file content to a clojure datastructure
     yaml/generate-string
     (spit (nth *command-line-args* 1)))

(В Windows) я могу создать командный файл с именем clj2yaml.bat, чтобы упростить его использование. Предполагается, что необходимые jar-файлы находятся в текущем каталоге. Я просто новичок, когда дело доходит до такого исполнения, поэтому вполне вероятно, что лучший сценарий возможен, но вот он:

java.exe -cp .\clojure-1.2.0.jar;.\clojure-contrib-1.2.0.jar;.\clj-yaml-0.3.0-20101010.033133-1.jar;.\snakeyaml-1.5.jar clojure.main sample.clj %*

Теперь я могу выполнить clj2yaml foo.clj foo.yaml для создания файла yaml.

2 голосов
/ 27 мая 2011

Вы уже знаете, как кодировать конвертер clojure, теперь вам просто нужно упаковать его как отдельное приложение и, возможно, создать скрипт sh, который просто вызывает ваш класс.

В качестве альтернативы, есть отличный способ сделать это , если вы находитесь в * nix окружении:

#^:shebang '[
exec java -cp "$HOME/src/clj/clojure/clojure.jar" clojure.lang.Script "$0" -- "$@"
]
(your code here)
...