first version: just parsing MVD .asotr files
This commit is contained in:
commit
3738d62359
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/target
|
||||
*.asotr*
|
16
Cargo.lock
generated
Normal file
16
Cargo.lock
generated
Normal file
@ -0,0 +1,16 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "asotr_csv"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
7
Cargo.toml
Normal file
7
Cargo.toml
Normal file
@ -0,0 +1,7 @@
|
||||
[package]
|
||||
name = "asotr_csv"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
byteorder = "1.4.3"
|
115
src/main.rs
Normal file
115
src/main.rs
Normal file
@ -0,0 +1,115 @@
|
||||
|
||||
pub mod asotr_data {
|
||||
use std::{fs::File, io::Read};
|
||||
use byteorder::{LittleEndian, ReadBytesExt};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Temp {
|
||||
ch: [f32; 6]
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Pow {
|
||||
ch: [u16; 6]
|
||||
}
|
||||
|
||||
fn parse_data_f32(buf: Vec<u8>) -> Result<Temp, String> {
|
||||
let mut data = &buf[..];
|
||||
let mut temp = Temp { ch: [0.0, 0.0, 0.0, 0.0, 0.0, 1.0] };
|
||||
|
||||
for i in 0..6 {
|
||||
temp.ch[i] = match data.read_f32::<LittleEndian>() {
|
||||
Ok(val) => val,
|
||||
Err(msg) => {
|
||||
return Err(format!("failed parsing float32 data: {}", msg)); }
|
||||
}
|
||||
}
|
||||
|
||||
return Ok(temp);
|
||||
}
|
||||
|
||||
fn parse_data_u16(buf: Vec<u8>) -> Result<Pow, String> {
|
||||
let mut data = &buf[..];
|
||||
let mut pow = Pow { ch: [0, 0, 0, 0, 0, 0] };
|
||||
|
||||
for i in 0..6 {
|
||||
pow.ch[i] = match data.read_u16::<LittleEndian>() {
|
||||
Ok(val) => val,
|
||||
Err(msg) => {
|
||||
return Err(format!("failed parsing float32 data: {}", msg)); }
|
||||
}
|
||||
}
|
||||
|
||||
return Ok(pow);
|
||||
}
|
||||
|
||||
pub fn parse_temp_file(fname: String) -> Result<Temp, String> {
|
||||
let mut buf = Vec::new();
|
||||
let _temp = Temp { ch: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] };
|
||||
|
||||
let mut data = match File::open(fname) {
|
||||
Ok(file) => file,
|
||||
Err(msg) => {
|
||||
return Err(format!("could not open data file: {}", msg))
|
||||
}
|
||||
};
|
||||
|
||||
let _st = match data.read_to_end(&mut buf) {
|
||||
Ok(stat) => stat,
|
||||
Err(msg) => {
|
||||
return Err(format!("could not read data file: {}", msg))
|
||||
}
|
||||
};
|
||||
|
||||
let _temp = parse_data_f32(buf)?;
|
||||
return Ok(_temp);
|
||||
}
|
||||
|
||||
pub fn parse_pow_file(fname: String) -> Result<Pow, String> {
|
||||
let mut buf = Vec::new();
|
||||
let _pow = Pow { ch: [0, 0, 0, 0, 0, 0] };
|
||||
|
||||
let mut data = match File::open(fname) {
|
||||
Ok(file) => file,
|
||||
Err(msg) => {
|
||||
return Err(format!("could not open data file: {}", msg))
|
||||
}
|
||||
};
|
||||
|
||||
let _st = match data.read_to_end(&mut buf) {
|
||||
Ok(stat) => stat,
|
||||
Err(msg) => {
|
||||
return Err(format!("could not read data file: {}", msg))
|
||||
}
|
||||
};
|
||||
|
||||
let _pow = parse_data_u16(buf)?;
|
||||
return Ok(_pow);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
fn main() {
|
||||
use crate::asotr_data::*;
|
||||
|
||||
let fname = "data01_.asotr01".to_string();
|
||||
let fname_set = "data06.asotr01".to_string();
|
||||
let fname_pow = "data02.asotr01".to_string();
|
||||
|
||||
let temp = parse_temp_file(fname.clone());
|
||||
let temp_set = parse_temp_file(fname_set.clone());
|
||||
let pow = parse_pow_file(fname_pow.clone());
|
||||
println!("{:?}", temp);
|
||||
println!("{:?}", temp_set);
|
||||
println!("{:?}", pow);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user