use clap::{Parser, ValueEnum};
use encoding_rs::Encoding;
use pspp::cooked::decode;
-use pspp::raw::{Reader, Record};
+use pspp::raw::{Reader, Record, Magic};
use std::fs::File;
use std::io::BufReader;
use std::path::{Path, PathBuf};
#[derive(Clone, Copy, Debug, Default, ValueEnum)]
enum Mode {
+ Identify,
Raw,
#[default]
Cooked,
let reader = BufReader::new(reader);
let mut reader = Reader::new(reader)?;
- let headers: Vec<Record> = reader.collect_headers()?;
match mode {
+ Mode::Identify => {
+ let Record::Header(header) = reader.next().unwrap()? else { unreachable!() };
+ match header.magic {
+ Magic::Sav => println!("SPSS System File"),
+ Magic::Zsav => println!("SPSS System File with Zlib compression"),
+ Magic::Ebcdic => println!("EBCDIC-encoded SPSS System File"),
+ }
+ return Ok(())
+ }
Mode::Raw => {
+ let headers: Vec<Record> = reader.collect_headers()?;
for header in headers {
println!("{header:?}");
}
}
Mode::Cooked => {
+ let headers: Vec<Record> = reader.collect_headers()?;
let headers = decode(headers, encoding, &|e| panic!("{e}"))?;
for header in headers {
println!("{header:?}");
}
for _ in 0..max_cases {
- let Some(Ok(Record::Case(data))) = reader.next() else {
+ let Some(Ok(record)) = reader.next() else {
break;
};
- println!("{:?}", data);
+ println!("{:?}", record);
}
Ok(())
}