Mercurial > lbo > hg > leveldb-rs
view examples/word-analyze/src/main.rs @ 639:140cb80c4a4f
Upgrade crc crate
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sat, 15 Jun 2024 12:26:12 +0200 |
parents | 68887f0a3e83 |
children | 2db2252aaa84 |
line wrap: on
line source
use leveldb::CompressorId; use rusty_leveldb as leveldb; use std::fs::OpenOptions; use std::io::{self, BufRead}; use std::path::Path; fn update_count(w: &str, db: &mut leveldb::DB) -> Option<()> { let mut count: usize = 0; if let Some(v) = db.get(w.as_bytes()) { let s = String::from_utf8(v).unwrap(); count = usize::from_str_radix(&s, 10).unwrap(); } count += 1; let s = count.to_string(); db.put(w.as_bytes(), s.as_bytes()).unwrap(); Some(()) } fn run(mut db: leveldb::DB) -> io::Result<()> { let files = std::env::args().skip(1); for f in files { let f = OpenOptions::new().read(true).open(Path::new(&f))?; for line in io::BufReader::new(f).lines() { for word in line.unwrap().split_whitespace() { let mut word = word.to_ascii_lowercase(); word.retain(|c| c.is_ascii_alphanumeric()); update_count(&word, &mut db); } } } Ok(()) } fn main() { let mut opts = leveldb::Options::default(); opts.compressor = leveldb::compressor::NoneCompressor::ID; let db = leveldb::DB::open("wordsdb", opts).unwrap(); run(db).unwrap(); }