2011-05-27 19 views
6

¿Cómo convertirías un archivo fuente clojure a YAML? He utilizado la biblioteca clj-yaml de hacerlo en el REPL interactiva, pero me gustaría para automatizar este, por lo que puede pasar en un archivo de entrada y especificar una salida, es decir:Clojure: Conversión de archivo Clojure a YAML

clj2yaml input.clj > output.yml 
+0

revisa el plugin 'lein-exec'; es perfecto para esto https://github.com/kumarshantanu/lein-exec – zach

Respuesta

2

usted ya sabe cómo codifique un convertidor clojure, ahora solo necesita empaquetarlo como una aplicación independiente, y posiblemente crear un script sh que invoque su clase.

Como alternativa, aquí hay un neat way to do it, si estás en un entorno * nix:

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

Debo añadir que puedo convertirlo en el REPL interactivo cuando esencialmente pego mi cadena. Mi falta de conocimiento de clojure es limitante en términos de cómo en realidad leer, convertir y escribir los datos convertidos con clojure. Gracias por tu respuesta –

4

como yo lo entiendo necesita ayuda para leer y escribir los archivos ?! Ver slurp y spit. Para un ejemplo real de leer un archivo de configuración YAML y analizarlo con clj-yaml, vea pswincom.gateway.config.

Y aquí es una implementación de una sencilla herramienta de clojure para hacer la conversión:

(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))) 

(en Windows) que puede crear un archivo por lotes llamado clj2yaml.bat para que sea fácil de usar. Asume que los archivos jar necesarios se encuentran en el directorio actual. Sólo soy un novato cuando se trata de este tipo de ejecución, por lo que una mejor guión es bastante probable que sea posible, pero aquí está:

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 %* 

ahora puedo ejecutar clj2yaml foo.clj foo.yaml para crear el archivo YAML.