29个版本
0.2.17 | 2023年12月6日 |
---|---|
0.2.16 | 2023年11月29日 |
0.1.96 | 2023年11月28日 |
0.1.88 | 2023年9月20日 |
0.1.55 | 2023年6月25日 |
#1015 in 解析器实现
33KB
576 行
Crate用于获取关于考试结果快速易读的统计数据和比较
您可以从文件创建一个Exam对象。目前支持的文件格式只有JSON和TOML文件。
示例
use std::error::Error;
use std::path::Path;
use exms::error::ParseError;
use exms::exam::Exam;
fn main() -> Result<(), ParseError> {
let file_path = Path::new("students.toml");
let exam = Exam::from_file(&file_path)?;
Ok(())
}
从文件解析
您要解析的每个文件都应该遵循以下格式:它必须包含一个名为students
的字段,其中包含每个学生的键/值对,键是学生的姓名,值是学生的成绩。学生的姓名应该是字符串,成绩是数字。
文件还可以包含一个可选字段,名为details
。此字段的当前可能选项包括
max_grade
(数字):考试的最高可能成绩。如果没有提供值,则默认最高成绩为10。name
(字符串):考试的名称。如果没有提供值,则使用文件名作为名称。
以下是一些有效文件的示例
JSON
{
"details": {
"name": "Exam 1",
"max_grade": 10
},
"students": {
"Abad Martinez, Jose": 4.89,
"Acevedo Fuenzalida, Ignacio Joaquin": 5.79,
"Alba Gisbert, Diego": 7.11,
"Alcántara Campillo, Irene": 4.41,
}
}
TOML
[details] # This field is optional
name = "Exam 1"
max_grade = 10
[students]
"Abad Martinez, Jose" = 4.89
"Acevedo Fuenzalida, Ignacio Joaquin" = 5.79
"Alba Gisbert, Diego" = 7.11
"Alcántara Campillo, Irene" = 4.41
解析其他文件格式
或者,您可以使用自己的解析逻辑来解析任何您想要解析的文件,将文件内容解析到Vec<Student>
中,并使用Exam::new()函数创建一个新的Exam
对象。
use std::error::Error;
use std::path::Path;
use exms::exam::{Exam, Student};
fn main() -> Result<(), Box<dyn Error>> {
let file_path = Path::new("my_file");
// Here you should parse your file into a Vec<Student>
let students: Vec<Student> = parse_file(&file_path)?;
let exam = Exam::new(students);
Ok(())
}
依赖项
~6–17MB
~193K SLoC