1use crate::reader::BufReader;
2use crate::*;
3
4pub fn read_n_lines(file: &mut BufReader, next: usize) -> String {
5 let mut result = String::new();
6
7 for _ in 1..=next {
8 let mut buffer = String::new();
9 file.read_line(&mut buffer);
10 result.push_str(buffer.as_str());
11 }
12
13 result
14}
15
16pub fn lines_per_file(file: &File, n_files: usize) -> Option<(usize, usize)> {
17 let total_lines = file.lines() - file.header();
18 let lines = total_lines as f32 / n_files as f32;
19
20 if lines < 1.0 {
21 None } else {
23 let lines = lines.floor() as usize;
24 Some((lines, total_lines - lines * n_files))
25 }
26}
27
28pub fn get_target_directory(file: &File) -> String {
29 format!(
30 "{}/{}",
31 current_dir().unwrap().display(),
32 file.base_name().unwrap()
33 )
34}
35
36pub fn gen_paths(file: &File, n_files: usize) -> Vec<String> {
37 let names = misc::gen_names(file, n_files);
38 names
39 .iter()
40 .map(|a| format!("{}/{}", get_target_directory(file), a))
41 .collect()
42}
43
44pub fn gen_names(file: &File, n_files: usize) -> Vec<String> {
45 let mut result = Vec::<String>::new();
46 let base_name = file.base_name().unwrap_or_else(|| {
47 exit(0);
48 });
49
50 for n in 1..=n_files {
51 result.push(format!("{}_{}.csv", base_name, n));
52 }
53
54 result
55}
56
57#[macro_export]
58macro_rules! b_file {
59 ($f: expr) => {
60 $f.clone().lock().unwrap().deref_mut()
61 };
62}