* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
-use anyhow::{Result};
+use anyhow::Result;
use clap::Parser;
-use pspp::raw::Reader;
+use pspp::raw::{Reader, Record};
use std::fs::File;
use std::io::BufReader;
use std::path::{Path, PathBuf};
struct Args {
/// Maximum number of cases to print.
#[arg(long = "data", default_value_t = 0)]
- max_cases: usize,
+ max_cases: u64,
/// Files to dissect.
#[arg(required = true)]
}
fn main() -> Result<()> {
- let Args { files, .. } = Args::parse();
+ let Args { max_cases, files } = Args::parse();
for file in files {
- dissect(&file)?;
+ dissect(&file, max_cases)?;
}
Ok(())
}
-fn dissect(file_name: &Path) -> Result<()> {
+fn dissect(file_name: &Path, max_cases: u64) -> Result<()> {
let reader = File::open(file_name)?;
let reader = BufReader::new(reader);
- let reader = Reader::new(reader)?;
- for record in reader {
+ let mut reader = Reader::new(reader)?;
+ let records: Vec<Record> = reader.collect_headers()?;
+
+ for record in records {
println!("{record:?}");
+ if let Record::EndOfHeaders(_) = record {
+ break;
+ };
+ }
+
+ for _ in 0..max_cases {
+ let Some(Ok(Record::Case(data))) = reader.next() else {
+ break;
+ };
+ println!("{:?}", data);
}
Ok(())
}