save data

This commit is contained in:
2025-07-01 13:44:51 +02:00
commit beaa0c0d1e
6 changed files with 15809 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/target

105
Cargo.lock generated Normal file
View 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
View 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"]}

15594
data.csv Normal file

File diff suppressed because it is too large Load Diff

38
src/main.rs Normal file
View 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
View 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>,
}