3个版本
0.1.2 | 2024年5月3日 |
---|---|
0.1.1 | 2024年4月27日 |
0.1.0 | 2024年4月27日 |
#121 in 模板引擎
34KB
635 行
GRIB2 Reader
这个库旨在完成两件事
- 使用tokio和async将合并的grib2文件切割成更小的单个grib2部分。
- 解析单个grib2文件,从一个
Vec<u8>
blob中(不使用tokio和async)。
用法
如果您想使用异步功能,请将此添加到您的Cargo.toml中
[dependencies]
grib2_reader = { version = "0.1.2", features = ["async"] }
如果您只想解析单个grib2文件,请将此添加到您的Cargo.toml中
[dependencies]
grib2_reader = "0.1.2"
示例
计算组合grib2文件中单个grib2文件的数量。
use grib2_reader::{Grib2Reader, Grib2Error};
async fn read_all() -> Result<(), Grib2Error> {
let f = File::open("data/HARMONIE_DINI_SF_5.grib").await?;
let mut b_reader = BufReader::new(f);
let file_length = b_reader.seek(SeekFrom::End(0)).await?;
let mut reader = Grib2Reader::new(b_reader);
let mut count = 0;
loop {
match reader.read_binary_next(file_length).await {
Ok(data) => {
if data.is_empty() {
println!("All done");
break;
}
// Here data is a Vec<u8> of the contained grib2 data
count += 1;
}
Err(Grib2Error::EOF) => {
println!("EOF");
break;
}
Err(err) => {
println!("Err: {:?}", err);
break;
}
};
}
println!("File count: {}", count);
Ok(())
}
当您只想解析单个grib2文件时
use grib2_reader::{Grib2Parser, Grib2Error};
fn parse_single() {
let mut f = File::open("data/HARMONIE_DINI_SF_5.grib").expect("Unable to open file");
let mut data = vec![];
f.read_to_end(&mut data).expect("Unable to read file");
let mut grib2_parser = Grib2Parser::new();
let mut grib = grib2_parser.parse(data).expect("Unable to parse grib2 file");
println!("Results:");
// We don't want to display the binary data, so remove that from the output
grib.data[0].data = vec![];
println!("{:#?}", &grib);
}
依赖项
~0.4–2MB
~39K SLoC