summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/clj/clojure/pprint.clj1
-rw-r--r--src/clj/clojure/pprint/print_table.clj36
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)))