//! 小分表命令行入口(对照测试用)。 //! 用法: scoretable_cli <颜色文本> <阈值> [--export ] use std::path::PathBuf; use toolbox_core::scoretable::{export_xlsx, process, ScoreTableInput, PALETTE}; fn main() { let args: Vec = std::env::args().collect(); if args.len() < 6 { eprintln!("用法: scoretable_cli <阈值> [--export out.xlsx]"); std::process::exit(2); } let mut export: Option = None; let mut i = 6; while i < args.len() { if args[i] == "--export" && i + 1 < args.len() { export = Some(PathBuf::from(&args[i + 1])); i += 2; } else { i += 1; } } let inp = ScoreTableInput { path: PathBuf::from(&args[1]), has_header: args[2] == "1", ignore_cols_text: args[3].clone(), color_groups_text: args[4].clone(), threshold: args[5].parse().unwrap_or(10), }; match process(&inp) { Ok(t) => { // 协议输出(与 reference.py 一致) println!("H\t{}", t.headers.join("\t")); for (r, row) in t.rows.iter().enumerate() { println!("R\t{}", row.join("\t")); let ci = match t.color_idx[r] { Some(i) => i as i64, None => -1, }; println!("C\t{}", ci); } if let Some(p) = export { match export_xlsx(&t, &p) { Ok(_) => println!("已导出: {}", p.display()), Err(e) => { eprintln!("{}", e); std::process::exit(1); } } } } Err(e) => { println!("ERR {}", e); std::process::exit(1); } } let _ = PALETTE; }