first version: just parsing MVD .asotr files

This commit is contained in:
Danila Gamkov 2025-01-21 22:31:05 +03:00
commit 3738d62359
4 changed files with 140 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/target
*.asotr*

16
Cargo.lock generated Normal file
View 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
View 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
View 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);
}