save data
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/target
|
||||
105
Cargo.lock
generated
Normal file
105
Cargo.lock
generated
Normal file
@@ -0,0 +1,105 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "csv"
|
||||
version = "1.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf"
|
||||
dependencies = [
|
||||
"csv-core",
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "csv-core"
|
||||
version = "0.1.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.7.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.95"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.40"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.219"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.219"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.101"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
||||
|
||||
[[package]]
|
||||
name = "wec_analyze"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"csv",
|
||||
"serde",
|
||||
]
|
||||
8
Cargo.toml
Normal file
8
Cargo.toml
Normal file
@@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "wec_analyze"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
csv = "1.3.1"
|
||||
serde = {version="1.0.219", features = ["derive"]}
|
||||
38
src/main.rs
Normal file
38
src/main.rs
Normal file
@@ -0,0 +1,38 @@
|
||||
use std::{error::Error, fs::File, io};
|
||||
use crate::model::RaceData;
|
||||
|
||||
mod model;
|
||||
|
||||
fn read_file() -> Result<Vec<RaceData>, Box<dyn Error>> {
|
||||
let file = File::open("/home/tom/Dev/Rust/wec_analyze/data.csv")?;
|
||||
|
||||
let mut reader = csv::ReaderBuilder::new()
|
||||
.delimiter(b',')
|
||||
.from_reader(file);
|
||||
|
||||
//println!("Headers: {:?}", reader.headers()?);
|
||||
let mut data = Vec::new();
|
||||
|
||||
for result in reader.deserialize::<RaceData>() {
|
||||
match result {
|
||||
Ok(record) => {
|
||||
//println!("{:?}", record);
|
||||
data.push(record);
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("Error parsing row: {}", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(data)
|
||||
}
|
||||
|
||||
|
||||
fn main() {
|
||||
let data = read_file();
|
||||
|
||||
for(i, record) in data.iter().enumerate(){
|
||||
println!("i: {}", i);
|
||||
}
|
||||
}
|
||||
63
src/model.rs
Normal file
63
src/model.rs
Normal file
@@ -0,0 +1,63 @@
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct RaceData {
|
||||
#[serde(rename = "NUMBER")]
|
||||
number: u8,
|
||||
#[serde(rename = "DRIVER_NUMBER")]
|
||||
driver_number: u8,
|
||||
#[serde(rename = "LAP_NUMBER")]
|
||||
lap_number: u16,
|
||||
#[serde(rename = "LAP_TIME")]
|
||||
lap_time: String,
|
||||
#[serde(rename = "LAP_IMPROVEMENT")]
|
||||
lap_improvement: u8,
|
||||
#[serde(rename = "CROSSING_FINISH_LINE_IN_PIT")]
|
||||
cross_finish_in_pit: Option<bool>,
|
||||
#[serde(rename = "S1")]
|
||||
sector1: Option<String>,
|
||||
#[serde(rename = "S1_IMPROVEMENT")]
|
||||
sector1_improvement: String,
|
||||
#[serde(rename = "S2")]
|
||||
sector2: Option<String>,
|
||||
#[serde(rename = "S2_IMPROVEMENT")]
|
||||
sector2_improvement: String,
|
||||
#[serde(rename = "S3")]
|
||||
sector3: Option<String>,
|
||||
#[serde(rename = "S3_IMPROVEMENT")]
|
||||
sector3_improvement: String,
|
||||
#[serde(rename = "KPH")]
|
||||
speed_kph: f32,
|
||||
#[serde(rename = "ELAPSED")]
|
||||
elapsed: String,
|
||||
#[serde(rename = "HOUR")]
|
||||
hour: String,
|
||||
#[serde(rename = "S1_LARGE")]
|
||||
s1_large: Option<String>,
|
||||
#[serde(rename = "S2_LARGE")]
|
||||
s2_large: Option<String>,
|
||||
#[serde(rename = "S3_LARGE")]
|
||||
s3_large: Option<String>,
|
||||
#[serde(rename = "TOP_SPEED")]
|
||||
top_speed: Option<f32>,
|
||||
#[serde(rename = "DRIVER_NAME")]
|
||||
driver_name: String,
|
||||
#[serde(rename = "PIT_TIME")]
|
||||
pit_time: Option<String>,
|
||||
#[serde(rename = "CLASS")]
|
||||
class: String,
|
||||
#[serde(rename = "GROUP")]
|
||||
group: Option<String>,
|
||||
#[serde(rename = "TEAM")]
|
||||
team: String,
|
||||
#[serde(rename = "MANUFACTURER")]
|
||||
manufacturer: String,
|
||||
#[serde(rename = "FLAG_AT_FL")]
|
||||
flag_at_fl: String,
|
||||
#[serde(rename = "S1_SECONDS")]
|
||||
s1_seconds: Option<f32>,
|
||||
#[serde(rename = "S2_SECONDS")]
|
||||
s2_seconds: Option<f32>,
|
||||
#[serde(rename = "S3_SECONDS")]
|
||||
s3_seconds: Option<f32>,
|
||||
}
|
||||
Reference in New Issue
Block a user