scoretable_cli.rs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //! 小分表命令行入口(对照测试用)。
  2. //! 用法: scoretable_cli <xlsx> <has_header 0|1> <ignore文本> <颜色文本> <阈值> [--export <out.xlsx>]
  3. use std::path::PathBuf;
  4. use toolbox_core::scoretable::{export_xlsx, process, ScoreTableInput, PALETTE};
  5. fn main() {
  6. let args: Vec<String> = std::env::args().collect();
  7. if args.len() < 6 {
  8. eprintln!("用法: scoretable_cli <xlsx> <has_header 0|1> <ignore> <colors> <阈值> [--export out.xlsx]");
  9. std::process::exit(2);
  10. }
  11. let mut export: Option<PathBuf> = None;
  12. let mut i = 6;
  13. while i < args.len() {
  14. if args[i] == "--export" && i + 1 < args.len() {
  15. export = Some(PathBuf::from(&args[i + 1]));
  16. i += 2;
  17. } else {
  18. i += 1;
  19. }
  20. }
  21. let inp = ScoreTableInput {
  22. path: PathBuf::from(&args[1]),
  23. has_header: args[2] == "1",
  24. ignore_cols_text: args[3].clone(),
  25. color_groups_text: args[4].clone(),
  26. threshold: args[5].parse().unwrap_or(10),
  27. };
  28. match process(&inp) {
  29. Ok(t) => {
  30. // 协议输出(与 reference.py 一致)
  31. println!("H\t{}", t.headers.join("\t"));
  32. for (r, row) in t.rows.iter().enumerate() {
  33. println!("R\t{}", row.join("\t"));
  34. let ci = match t.color_idx[r] {
  35. Some(i) => i as i64,
  36. None => -1,
  37. };
  38. println!("C\t{}", ci);
  39. }
  40. if let Some(p) = export {
  41. match export_xlsx(&t, &p) {
  42. Ok(_) => println!("已导出: {}", p.display()),
  43. Err(e) => {
  44. eprintln!("{}", e);
  45. std::process::exit(1);
  46. }
  47. }
  48. }
  49. }
  50. Err(e) => {
  51. println!("ERR {}", e);
  52. std::process::exit(1);
  53. }
  54. }
  55. let _ = PALETTE;
  56. }