diff options
-rw-r--r-- | src/clj/clojure/pprint.clj | 1 | ||||
-rw-r--r-- | src/clj/clojure/pprint/print_table.clj | 36 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/clj/clojure/pprint.clj b/src/clj/clojure/pprint.clj index 99fc605a..846a5f32 100644 --- a/src/clj/clojure/pprint.clj +++ b/src/clj/clojure/pprint.clj @@ -44,5 +44,6 @@ complete documentation on the the clojure web site on github.", (load "pprint/pprint_base") (load "pprint/cl_format") (load "pprint/dispatch") +(load "pprint/print_table") nil diff --git a/src/clj/clojure/pprint/print_table.clj b/src/clj/clojure/pprint/print_table.clj new file mode 100644 index 00000000..f285b8c9 --- /dev/null +++ b/src/clj/clojure/pprint/print_table.clj @@ -0,0 +1,36 @@ +; Copyright (c) Rich Hickey. All rights reserved. +; The use and distribution terms for this software are covered by the +; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) +; which can be found in the file epl-v10.html at the root of this distribution. +; By using this software in any fashion, you are agreeing to be bound by +; the terms of this license. +; You must not remove this notice, or any other, from this software. + +(in-ns 'clojure.pprint) + +(defn print-table + "Alpha - subject to change. + Prints a collection of maps in a textual table. Prints table headings + ks, and then a line of output for each row, corresponding to the keys + in ks. If ks are not specified, use the keys of the first item in rows." + {:added "1.3"} + ([ks rows] + (when (seq rows) + (let [widths (map + (fn [k] + (apply max (count (str k)) (map #(count (str (get % k))) rows))) + ks) + fmts (map #(str "%-" % "s") widths) + fmt-row (fn [row] + (apply str (interpose " | " + (for [[col fmt] (map vector (map #(get row %) ks) fmts)] + (format fmt (str col)))))) + header (fmt-row (zipmap ks ks)) + bar (apply str (repeat (count header) "="))] + (println bar) + (println header) + (println bar) + (doseq [row rows] + (println (fmt-row row))) + (println bar)))) + ([rows] (print-table (keys (first rows)) rows))) |