【问题标题】:How do I pretty-print a table in Haskell?如何在 Haskell 中漂亮地打印表格?
【发布时间】:2012-05-04 19:00:35
【问题描述】:

我想在 Haskell 中漂亮地打印一个类似表格的数据结构(列列表)。

例如...

Table [
    StrCol "strings" ["a", "bc", "c"],
    IntCol "ints" [1, 30, -2],
    DblCol "doubles" [2.0, 4.5, -3.2]]

应该渲染类似...

strings ints doubles
    "a"    1     2.0
   "bc"   30     4.5
    "c"   -2    -3.2

目前我已经在最新版本的 Haskell 平台附带的 Text.PrettyPrint 中实现了这个功能。不幸的是, 运算符将多行文档彼此“对角线”定向。

例如

(text "a" $+$ text "b") <+> (text "c" $+$ text "d")

呈现为

a
b c
  d

而不是

a c
b d

因此,我转置单元格并先水平合并它们,然后垂直合并,但这会导致列未对齐。

在较旧的table pretty-printing question 中,augustss 指的是添加更多代码以使列自动适应最宽的条目。

我猜测每列的最大长度的“sizedText”会这样做,除了这个函数似乎不是 Haskell Platform Text.PrettyPrint 模块的一部分(我认为它在密切相关的 Text .漂亮的包)。

实现这个漂亮打印功能的最简单的非hacky方法是什么?这是我项目的一小部分,所以我想避免编写自己的漂亮打印,如果可以的话,我更愿意避免模块依赖。

【问题讨论】:

  • 使用漂亮的打印机,您只能从左到右打印,然后将行连接在一起。最简单的做法是先转置矩阵,然后从左到右工作。通常您找不到Doc 的宽度,因此您需要在需要填充的地方将其添加到字符串中,然后再使用text 创建文档。

标签: haskell pretty-print


【解决方案1】:

http://hackage.haskell.org/package/boxes

盒子包

一个漂亮的打印库,用于在二维中布置文本,使用简单的盒子模型......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2011-01-02
    • 2017-09-16
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    相关资源
    最近更新 更多