#ledger-cli #parser #ledger #file-format #cli-input #cli-parser #line-comment

ledger-parser

Rust 库,用于解析 ledger-cli(https://www.ledger-cli.org/)输入文件

14 个稳定版本 (6 个主要版本)

7.0.0 2024年6月6日
6.0.0 2024年3月5日
5.1.1 2022年4月21日
5.1.0 2022年1月24日
1.0.1 2018年10月22日

#264解析器实现

每月31次 下载
ledger-utils 中使用

Unlicense 许可

100KB
2.5K SLoC

ledger-parser

Crates.io Version Docs.rs Version License Unlicense

Rust 库,用于解析 Ledger-cli 输入文件。

文件格式

仅实现了 ledger-cli 文件格式的一部分。

支持元素

  • 行注释(以:; # % | * 开始)

  • 内联注释(以 ; 开始)

  • 具有(在 DESCNOTE 之间至少有两个空格或一个制表符)格式的交易标题

    DATE[=EDATE] [*|!] [(CODE)] DESC  [; NOTE]
    
  • 具有(在 ACCOUNTAMOUNT 之间至少有两个空格或一个制表符)格式的交易分录

      ACCOUNT  [AMOUNT] [= BALANCE] [; NOTE]
    
    • 支持虚拟账户

    • 支持带有日期、生效日期和元数据标签的记账注释

      ACCOUNT  [AMOUNT] [= BALANCE]  ; [YYYY-MM-DD]
      ACCOUNT  [AMOUNT] [= BALANCE]  ; [=YYYY-MM-DD]
      ACCOUNT  [AMOUNT] [= BALANCE]  ; :TAG1:TAG2:
      ACCOUNT  [AMOUNT] [= BALANCE]  ; Tag: String Value
      ACCOUNT  [AMOUNT] [= BALANCE]  ; Tag:: -1
      ACCOUNT  [AMOUNT] [= BALANCE]  ; Tag:: 1.0
      ACCOUNT  [AMOUNT] [= BALANCE]  ; Tag:: [YYYY-MM-DD]
    
  • AMOUNT 可以与批次和商品价格 ({}, {{}}, @, @@) 结合

  • 具有格式的商品价格

    P DATE SYMBOL PRICE
    
  • 命令指令:include

示例

解析

let ledger: ledger_parser::Ledger = r#"; Example 1
2018-10-01=2018-10-14 ! (123) Description
  ; Transaction comment
  TEST:Account 123  $1.20
  ; Posting comment
  TEST:Account 345  -$1.20"#
    .parse()?;

序列化

use ledger_parser::{ Serializer, SerializerSettings };

println!("{}", ledger);
println!("{}", ledger.to_string_pretty(&SerializerSettings::default().with_indent("\t")));

另请参阅

  • ledger-utils - ledger-cli 文件处理 Rust 库,用于计算余额、创建报告等。

依赖关系

~3MB
~55K SLoC