#crlf #lf #line-ending #byte-buffer #eol

bin+lib loe

非常快速,另一个用 Rust 编写的行结束符(CRLF <-> LF)转换器

4 个版本 (2 个重大更新)

0.3.0 2022 年 5 月 28 日
0.2.1 2022 年 5 月 28 日
0.2.0 2018 年 11 月 26 日
0.1.0 2018 年 10 月 13 日

#779 in 文本处理


2 crates 中使用

MIT 许可证

24KB
478

loe

非常快速,另一个用 Rust 编写的行结束符(CRLF <-> LF)转换器。它既作为库也作为可运行的程序分发。考虑到性能(在字节缓冲区而不是字符串上工作)。

功能

  • CRLF -> LF 和 LF -> CRLF 转换
  • 输入编码检查(Ascii,UTF-8,易于扩展)
  • 基本上就是这样

用法

命令行

$ cargo install loe
$ loe --help  # prints usage
$ loe -o unix.txt dos.txt

Cargo.toml

[dependencies]
loe = "0.3"

在你的源文件中

extern crate loe;

use std::io::Cursor;

use loe::{process, Config};

fn convert(input: String) -> String {
    let mut input = Cursor::new(input);
    let mut output = Cursor::new(Vec::new());

    process(&mut input, &mut output, Config::default());
    String::from_utf8(output.into_inner()).unwrap()
}

查看 文档 了解更多信息!

基准测试

基准测试使用 hyperfine 工具和以下命令执行:hyperfine '<command>' --prepare 'sync; echo 3 | sudo tee /proc/sys/vm/drop_caches'。由于 dos2unix 默认会检查文件是否为二进制文件,因此 loe 命令使用 -e ascii,因为它在 loe 中模仿了这种行为。

硬件和软件配置

文件 bench.txt 144 MB,200k 行,仅限 ascii
处理器 Intel(R) Core(TM) i5-4200M CPU @ 2.50GHz
磁盘 Samsung SSD 840
内核 4.20.5-arch1-1-ARCH
loe 0.2.0
dos2unix 7.4.0
hyperfine 1.3.0

结果

命令 平均 [ms] 最小…最大 [ms]
loe-o out.txt bench.txt 1011.2 ± 59.9 968.5…1153.3
loe-e ascii-o out.txt bench.txt 962.9 ± 14.2 950.3…996.6
dos2unix-n bench.txt out.txt 1358.8 ± 94.1 1214.3…1502.9
loe-e ascii-n crlf-o out.txt bench.txt 1105.6 ± 18.0 1077.4…1135.2
unix2dos-n bench.txt out.txt 1763.6 ± 118.5 1636.4…1985.2
loe-e ascii-o bench.txt bench.txt 1086.4 ± 20.3 1050.0…1129.2
dos2unix 基准测试.txt 1354.0 ± 81.1 1246.4…1484.0
tr-d'\r' <bench.txt>out.txt 472.4 ± 4.3 466.8…478.9

平均来说,loe 比 dos2unix 快约 1.4 倍。请注意,虽然 dos2unix 提供了比 loe 更多的功能,但在 loe 中实现它们不应过多影响性能。

许可证

loe 采用 MIT 许可证。您可以自由使用、贡献或传播。

依赖关系

约 1MB