Compare commits

...

4 commits

Author SHA1 Message Date
8483733678 Added code to handle packaging 2025-04-18 18:53:13 -04:00
c2f6dd47b4 Main now has Packager 2025-04-18 18:53:02 -04:00
820b024d10 Added WalkDir to Packages List 2025-04-18 18:52:55 -04:00
bfa80e061c Added extra arg for Master CSV 2025-04-18 18:33:24 -04:00
4 changed files with 81 additions and 3 deletions

View file

@ -5,6 +5,7 @@ edition = "2021"
[dependencies]
pdf-extract = "0.9.0"
walkdir = "2.5.0"
colored = "3.0.0"
clap = "4.5.36"
csv = "1.3.1"

View file

@ -60,6 +60,13 @@ impl Arguments {
.help("The path where your CSV files are")
.action(ArgAction::Set)
.required(true),
)
.arg(
Arg::new("file_out")
.id("file_out")
.help("The path where the master CSV is saved")
.action(ArgAction::Set)
.required(true),
),
)
.get_matches();
@ -93,8 +100,11 @@ impl Arguments {
.get_one::<String>("directory")
.unwrap()
.to_owned();
file_output = package_matches
.get_one::<String>("file_out")
.unwrap()
.to_owned();
file_input = String::new();
file_output = String::new();
}
_ => unreachable!(),
}

View file

@ -46,7 +46,11 @@ fn convert(args: &Arguments) -> Result<()> {
Ok(())
}
fn package(args: &Arguments) -> Result<()> {
//
// Creating a Packager
let packager = Packager::new(args.csv_directory.clone(), args.file_output.clone());
// Starting it
packager.start()?;
// Ok!!
Ok(())

View file

@ -1,5 +1,9 @@
// Libraries
use std::io::Result;
use std::fs::File;
use std::io::{self, Result};
use csv::{self, StringRecord};
use walkdir::WalkDir;
// Structures
pub struct Packager {
@ -18,7 +22,66 @@ impl Packager {
}
// Functions
fn read_csv(&self, path: &str) -> Result<Vec<StringRecord>> {
// Opening the File & Reading
let file = File::open(path)?;
let mut rdr = csv::Reader::from_reader(file);
// Creating a list of string records
let mut result: Vec<StringRecord> = Vec::new();
// Iterate through records
for record in rdr.records() {
result.push(record?);
}
// Ok!
Ok(result)
}
fn save(&self, records: Vec<StringRecord>) -> Result<()> {
// Writing to the path we want
let mut writer = csv::Writer::from_path(&self.file_out)?;
// Creating the Header
writer.write_record(&["Date", "Description", "Amount"])?;
// Adding all Records
for record in &records {
writer.write_record(record)?;
}
// Flushing!!
writer.flush()?;
// Ok!!
Ok(())
}
pub fn start(&self) -> Result<()> {
// Holding all Records
let mut records: Vec<StringRecord> = Vec::new();
// Using WalkDir to go through the Directory
for entry in WalkDir::new(&self.directory) {
// Reference the Path
let entry = entry?;
let path = entry.path();
// Is it a file?
if !path.is_file() {
continue;
}
// Reading the CSV from the Path
let file = self.read_csv(path.to_str().unwrap())?;
// Adding it to the record list
records.extend(file);
}
// Saving the Records
self.save(records)?;
// Ok!!
Ok(())
}