#x12 #edi #pretty-print #file #processing #format #cli

app x12pp

X12 EDI 文件的 CLI 美化打印器

3 个版本 (破坏性)

0.3.0 2019年5月2日
0.2.0 2019年4月28日
0.1.0 2019年4月28日

#213 in 值格式化

GPL-3.0-only

17KB
133

x12pp

x12pp 是 X12 EDI 文件的 CLI 美化打印器。

X12 是一种复杂的格式,由一个固定长度的标题和一系列由段终止符字符分隔的段组成。

这些段通常不以换行符分隔,因此从文件中提取一系列行或使用常用的 Unix 工具箱查看开始部分会变得不必要地痛苦。

当然,您可以使用 sed --e 's/~/~\n/g' 分割行,继续您的日常事务,但

  1. 尽管 ~ 是传统且最广泛使用的段终止符,但它不是必需的 - 每个 X12 文件都指定了其自己的终止符作为标题的一部分。
  2. 使用 sedperl 意味着我没有机会探索 Rust 中的快速流处理。

所以我们在这里。

安装

Homebrew

$ brew tap clarkema/nomad
$ brew install x12pp

使用 cargo

$ cargo install x12pp

从源代码

x12pp 使用 Rust 编写,因此您需要安装最新的 Rust,才能从源代码构建它。结果是位于 target/release/x12pp 的静态编译二进制文件,您可以将它复制到您需要的任何地方。

$ git clone https://github.com/clarkema/x12pp
$ cd x12pp
$ cargo build --release
$ ./target/release/x12pp --version

使用方法

$ x12pp < FILE > NEWFILE
$ x12pp FILE -o NEWFILE

# Strip newlines out instead with:
$ x12pp --uglify FILE

请参阅手册页或 --help 以获取更多信息。

基准测试

所有测试都是在英特尔酷睿 i9-7940X 上进行的,使用位于 RAM 磁盘上的 1.3G X12 测试文件。在每种情况下,都使用了 shell 重定向,将文件通过测试命令管道到 /dev/null,以便尽可能接近测量纯处理时间。例如

$time sed -e 's/~/~\n/g' <test-file>/dev/null

工具 命令 终止符检测 预包装? SIGPIPE? 时间
x12pp x12pp 1.3s
GNU sed 4.7 sed-e's'/~/~\n/g' 7.6s
perl 5.28.2 perl-pe's'/~[\r\n]*/~\n/g' ✓ 但较慢 8.5s
edicat edicat 7m41s

备注

  1. 'SIGPIPE' 指的是命令是否可以在不处理整个输入的情况下返回部分结果。创建 x12pp 之一的原因是能够在不遍历多个吉字节文件的情况下运行 x12pp < FILE | head -n 100
  2. 当然,你可以编写一个 Perl 脚本,在处理文件其余部分之前正确地读取段终止符。
  3. Perl 可以使用已包装的输入数据产生正确的输出,但速度要慢得多;大约24秒,而8.5秒。
  4. 有关 edicat 的更多信息,请参阅 https://github.com/notpeter/edicat

依赖项

~0.8–1.3MB
~13K SLoC