From 3738d62359a0603d23831658d21603a57a92e56a Mon Sep 17 00:00:00 2001 From: Danila Gamkov Date: Tue, 21 Jan 2025 22:31:05 +0300 Subject: [PATCH] first version: just parsing MVD .asotr files --- .gitignore | 2 + Cargo.lock | 16 ++++++++ Cargo.toml | 7 ++++ src/main.rs | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 140 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bb657df --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +*.asotr* diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..caaa7a1 --- /dev/null +++ b/Cargo.lock @@ -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" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..1f7c1e2 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "asotr_csv" +version = "0.1.0" +edition = "2021" + +[dependencies] +byteorder = "1.4.3" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..bc16cc5 --- /dev/null +++ b/src/main.rs @@ -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) -> Result { + 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::() { + Ok(val) => val, + Err(msg) => { + return Err(format!("failed parsing float32 data: {}", msg)); } + } + } + + return Ok(temp); + } + + fn parse_data_u16(buf: Vec) -> Result { + 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::() { + Ok(val) => val, + Err(msg) => { + return Err(format!("failed parsing float32 data: {}", msg)); } + } + } + + return Ok(pow); + } + + pub fn parse_temp_file(fname: String) -> Result { + 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 { + 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); +} + + + + + +