1

私の目標は、テーブルを各列の間に均等にスペースを空けて印刷することです。

(defn PrintTable [tableName]
  "prints table in clear format"
  (let [tableRef (get (deref dataBase) tableName) ; get refrence for table
        keyList (keys @tableRef)] ; get key list of table
    (doseq [tableKeys (range (count keyList))] ; print the keys of the table
      (let [key (nth (keys @tableRef) tableKeys)]
        (print key "\t|"))
    )
    (println)
    (doseq [rows (range (count @(tableRef (nth (keys @tableRef) 0))))] ; print for each rows all the values
      (doseq [cols (range (count keyList))]
        (let [key (nth (keys @tableRef) cols)]
          (print (@(tableRef key) rows) "\t|")
        )
      )
      (println)
    )
  )
  (println)
)

私はタブを使用してみましたが、これは私が得る結果です:

P_Id    |LastName   |FirstName  |Address    |City   |
1   |Darmon     |Gilad  |ishayahu   |Haifa  |
2   |SM     |Shiran     |erez   |RamatIshay     |

D_Id    |Name   |OwnerLastName  |OwnerFirstName     |
a   |Bono   |Darmon     |Gilad  |
b   |Bony   |SM     |Shiran     |

より適切で整列した印刷の提案はありますか?

4

4 に答える 4

3

format列を整列させるために使用します。

user> (println (format "%20s %20s %20s\n%20s %20s %20s" 
                 "short" "medium" "reallylong" 
                 "reallylong" "medium" "short"))

               short               medium           reallylong
          reallylong               medium                short
nil
user> 

または左揃え%-20s

user> (println (format "%-20s %-20s %-20s\n%-20s %-20s %-20s" 
                        "short" "medium" "reallylong" 
                        "reallylong" "medium" "short")) 

short                medium               reallylong 
reallylong           medium               short 
nil 
user>
于 2013-02-22T18:49:28.987 に答える
2

これは役立つかもしれません:

http://clojuredocs.org/clojure_core/clojure.pprint/print-table

アルファ - 変更される可能性があります。マップのコレクションをテキスト テーブルに出力します。テーブルの見出し ks を出力し、次に ks のキーに対応する行ごとに 1 行の出力を出力します。ks が指定されていない場合は、行の最初の項目のキーを使用します。

于 2013-06-18T11:20:29.740 に答える
1
(defn print-table [res]
  (let [headers (map name (keys (first res)))
        table (concat [headers] (map vals res))
        trans-table (apply map vector table)
        cols-width (map #(apply max (map (comp count str) %))
                        trans-table)]
    (doseq [row table]
      (println
       (apply format
              (str "|" (apply str (str/join "|" (map #(str "%-" % "s")
                                                     cols-width)))
                   "|")
              row)))))

(print-table res)
=> |P_Id|LastName|FirstName|Address |City      |
   |1   |Darmon  |Gilad    |ishayahu|Haifa     |
   |2   |SM      |Shiran   |erez    |RamatIshay|
于 2013-02-22T19:40:55.110 に答える