diff --git a/README.md b/README.md index 182b352..db5b6b9 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,44 @@ # csv2edn -Simple command line utility to convert CSV files to EDN. Assumes the first row of a CSV file contains column headers. +Simple command line utility and library to convert +[comma-separated value (CSV)](https://tools.ietf.org/html/rfc4180) files to +[extensible data notation (EDN)](https://github.com/edn-format/edn) or +[javascript object notation (JSON)](https://www.json.org/json-en.html). Assumes +the first row of a CSV file contains column headers. ## Installation [![Clojars Project](https://img.shields.io/clojars/v/csv2edn.svg)](https://clojars.org/csv2edn) +**NOTE**: if the version numbers given below differ from the number in the +image above, the image (which is automatically generated) is correct and +this file (which is manually maintained) is in error. + ### Leiningen/Boot -[csv2edn "0.1.4"] +[csv2edn "0.1.5"] ### Clojure CLI/deps.edn -csv2edn {:mvn/version "0.1.4"} +csv2edn {:mvn/version "0.1.5"} ### Gradle -compile 'csv2edn:csv2edn:0.1.4' +compile 'csv2edn:csv2edn:0.1.5' ### Maven csv2edn csv2edn - 0.1.4 + 0.1.5 ## Usage: as a standalone commandline tool To run from the command line: - $ java -jar csv2edn-0.1.4-standalone.jar [options] + $ java -jar csv2edn-0.1.5-standalone.jar [options] ### Options @@ -51,17 +59,17 @@ Where options are: The simplest possible use is to simply use this in a pipeline: $ cat path/to/file.csv |\ - java -jar csv2edn-0.1.4-standalone.jar > path/to/file.edn + java -jar csv2edn-0.1.5-standalone.jar > path/to/file.edn Exactly the same behaviour can be achieved by specifying input and output paths: - $ java -jar csv2edn-0.1.4-standalone.jar \ + $ java -jar csv2edn-0.1.5-standalone.jar \ -i path/to/file.csv -o path/to/file.edn or - $ java -jar csv2edn-0.1.4-standalone.jar \ + $ java -jar csv2edn-0.1.5-standalone.jar \ --input path/to/file.csv --output path/to/file.edn ## Usage: as a library diff --git a/src/csv2edn/csv2edn.clj b/src/csv2edn/csv2edn.clj index 4e29b7d..eb6f682 100644 --- a/src/csv2edn/csv2edn.clj +++ b/src/csv2edn/csv2edn.clj @@ -4,7 +4,7 @@ [clojure.data.json :as json] [clojure.java.io :as io] [clojure.pprint :refer [pprint]] - [clojure.string :refer [lower-case]])) + [clojure.string :as s])) (def ^:dynamic *options* "Defaults for options used in conversion (essentially, `:separator` is `,`, @@ -33,7 +33,9 @@ (csv/read-csv reader :separator (first (str sep))))) - headers (map #(keyword (lower-case %)) (first data)) + headers (map #(keyword + (s/replace (s/lower-case %) #"[^a-z0-9]" "-")) + (first data)) result (map #(zipmap headers (map maybe-read %)) (rest data))]