Skip to content

Commit d0c9941

Browse files
committed
Port comb tool
1 parent 2b930f8 commit d0c9941

File tree

3 files changed

+302
-0
lines changed

3 files changed

+302
-0
lines changed

comb/Cargo.lock

+238
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

comb/Cargo.toml

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[package]
2+
name = "comb"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
clap = { version = "3.2.12", features = ["derive"] }

comb/src/main.rs

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
use std::{
2+
fs::File,
3+
io::{self, BufRead, BufReader, Seek},
4+
mem,
5+
path::PathBuf,
6+
};
7+
8+
use clap::Parser;
9+
10+
/// Combine the lines from two files in every combination
11+
#[derive(Debug, Parser)]
12+
#[clap(about, arg_required_else_help(true))]
13+
struct Args {
14+
/// Flip mode (order by suffix)
15+
#[clap(short, long)]
16+
flip: bool,
17+
18+
/// String to place between prefix and suffix
19+
#[clap(short, long, value_parser, default_value_t)]
20+
separator: String,
21+
22+
/// Path to a text file with each line representing a prefix
23+
#[clap(value_parser)]
24+
prefixfile: PathBuf,
25+
26+
/// Same as prefix file, but for suffixes
27+
#[clap(value_parser)]
28+
suffixfile: PathBuf,
29+
}
30+
31+
fn main() -> io::Result<()> {
32+
let Args {
33+
flip,
34+
separator,
35+
prefixfile,
36+
suffixfile,
37+
} = Args::parse();
38+
let (mut outer, mut inner) = (prefixfile, suffixfile);
39+
if flip {
40+
mem::swap(&mut outer, &mut inner);
41+
}
42+
let outer = BufReader::new(File::open(outer)?);
43+
let mut inner = BufReader::new(File::open(inner)?);
44+
for outer in outer.lines() {
45+
let outer = outer?;
46+
inner.seek(io::SeekFrom::Start(0))?;
47+
for inner in (&mut inner).lines() {
48+
let inner = inner?;
49+
let (mut prefix, mut suffix) = (&outer, &inner);
50+
if flip {
51+
mem::swap(&mut prefix, &mut suffix);
52+
}
53+
println!("{prefix}{separator}{suffix}");
54+
}
55+
}
56+
Ok(())
57+
}

0 commit comments

Comments
 (0)