#erlang #printing #term #format #pretty-print #external #command-line-tool

bin+lib ppbert

简单的 Erlang 外部项格式美化打印工具

34 个版本

0.12.1 2020 年 11 月 24 日
0.11.0 2020 年 6 月 5 日
0.9.1 2020 年 2 月 14 日
0.9.0 2019 年 9 月 22 日
0.2.6 2017 年 7 月 7 日

186值格式化

Download history 4/week @ 2024-03-08 8/week @ 2024-03-29

86 每月下载量

MIT 许可证

41KB
1K SLoC

目录

ppbert

一个命令行工具,用于使用 Erlang 的 外部项格式 美化打印结构。输入从 stdin 或文件读取,输出到 stdout,使 ppbert 成为 shell 管道的好选择。

目前,ppbert 支持以下外部项格式的子集

  • 小整数(标记:97);
  • 整数(标记:98);
  • 浮点数(标记:70,99);
  • 大整数(标记:110,111);
  • Latin-1 原子(标记:100,115);
  • UTF-8 原子(标记:118,119);
  • 字符串(标记:107);
  • 二进制(标记:109);
  • 元组(标记:104,105);
  • 列表(标记:106,108);
  • 映射(标记:116)。

用法

$ ppbert --help
ppbert 0.9.0

Options:
    -V, --version       display version
    -h, --help          display this help
    -i, --indent NUM    indent with NUM spaces
    -m, --per-line NUM  print at most NUM basic terms per line
    -p, --parse         parse only, not pretty print
    -2, --bert2         parse .bert2 files
    -d, --disk-log      parse disk_log files
    -v, --verbose       show diagnostics on stderr
    -j, --json          print as JSON
    -t, --transform-proplists
                        convert proplists to JSON objects


$ ppbert mini_dict.bert
[
  {host, "localhost"},
  {port, 80},
  {
    headers,
    [
      {
        <<"X-Real-Ip">>,
        {127, 0, 0, 1}
      },
      {<<"Keep-alive">>, true}
    ]
  }
]

$ printf "\x83\x77\x04atom" | ppbert
atom

性能

ppbert 用 Rust 编写,并在性能上比使用 Erlang 的 erlang:binary_to_term/1io:format/2 有显著提升。

$ cat erl_ppbert
#!/usr/bin/env escript

main(Args) ->
    lists:foreach(fun (Filename) ->
        {ok, Binary} = file:read_file(Filename),
        io:format("~p~n", [binary_to_term(Binary)])
    end, Args).

$ du large.bert
96M     large.bert

$ time ./erl_ppbert large.bert >/dev/null

real	0m43.017s
user	0m38.846s
sys 	0m4.345s

$ time ppbert large.bert >/dev/null

real	0m1.802s
user	0m1.251s
sys     0m0.549s

依赖关系

~3.5MB
~47K SLoC