Skip to content

Commit d94b67e

Browse files
committed
Initialize wcount
1 parent 6c2e4f2 commit d94b67e

7 files changed

Lines changed: 109 additions & 0 deletions

File tree

ch10/wcount/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# コンパイラが生成する成果物や中間ファイルが置かれる
2+
target/

ch10/wcount/Cargo.lock

Lines changed: 58 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ch10/wcount/Cargo.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "wcount"
3+
version = "0.1.0"
4+
authors = ["kento tajiri <k.denjiry@gmail.com>"]
5+
edition = "2018"
6+
7+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8+
9+
[dependencies]
10+
regex = "1.0"

ch10/wcount/src/lib.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use regex::Regex;
2+
use std::collections::HashMap;
3+
use std::io::BufRead;
4+
5+
pub fn count(input: impl BufRead) -> HashMap<String, usize> {
6+
let re = Regex::new(r"\w+").unwrap();
7+
let mut freqs = HashMap::new(); // HashMap<String, usize>型
8+
9+
for line in input.lines() {
10+
let line = line.unwrap();
11+
for m in re.find_iter(&line) {
12+
let word = m.as_str().to_string();
13+
// 5. 出現した単語の出現頻度を数える
14+
*freqs.entry(word).or_insert(0) += 1;
15+
}
16+
}
17+
freqs
18+
}

ch10/wcount/src/main.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use std::env;
2+
use std::fs::File;
3+
use std::io::BufReader;
4+
5+
use wcount::count;
6+
7+
fn main() {
8+
// 1. コマンドラインで指定された引数を読み込む
9+
let filename = env::args().nth(1).expect("1 argument FILENAME required");
10+
// 2. 指定されたファイルを開く
11+
let file = File::open(filename).unwrap();
12+
let reader = BufReader::new(&file);
13+
14+
// 3. ファイルから1行ずつ読み込む
15+
// 第2引数 `Default::default` を加える
16+
let freqs = count(reader);
17+
println!("{:?}", freqs);
18+
}

ch10/wcount/text.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
aa bb cc aa

ch10/wordcount/Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)