I wrote Clojure code which takes named params and has to generate 2 .csv files as output.
Please review it.
(ns my_cli_clojure.core
(:gen-class :main true))
(require '[clojure.data.csv :as csv]
'[clojure.java.io :as io]
'[me.raynes.fs :as fs]
'[clojure.tools.cli :refer [cli] :as c])
(defn write_csv_data [& {:keys [data outfile]
:or {data ""
outfile ""}}]
(csv/write-csv outfile
data))
(defn -main
[& args]
(let [[options args banner]
(c/cli args
["-d" "-dome" "Dome Identifier" :default "dome1"]
["-p" "-principal" "Principal code" :default "kraft"]
["-o" "-output-directory" "Output file" :default "."]
["-h" "-help" "Show Help" :flag true :default false])]
(when (:help options)
(println banner)
(System/exit 0))
(let [output_directory (:output-directory options)]
(if-not (fs/exists? output_directory)
(fs/mkdirs output_directory))
(doseq [n (clojure.string/split (:dome options) #",")]
(let [dome_identifier (first (clojure.string/split n #"-"))]
(with-open [out-file (io/writer (clojure.string/join "/" [output_directory
(clojure.string/join "." [dome_identifier "csv"])]))]
(write_csv_data :data [["dome_identifier" "name"]
[dome_identifier (first (reverse (clojure.string/split n #"-")))]] :outfile out-file))
(with-open [dome_principal_file (io/writer (clojure.string/join "/" [output_directory
(clojure.string/join "." ["dome_principal" dome_identifier "csv"])]))]
(write_csv_data :data [(clojure.string/split "dome_identifier principal_code currency_code active latitude longitude" #"\s")
[dome_identifier (:principal options) "" "t" "" ""]] :outfile dome_principal_file)))))))