Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::os;
- use std::io;
- fn main() {
- let args = os::args();
- if args.len() != 2 {
- println!("Usage: {:s} <file>", args[0].as_slice());
- return;
- }
- let p = Path::new(args[1].as_slice());
- match io::File::open(&p) {
- Ok(f) => {
- let cnt = count_lines(f);
- println!("{}", cnt);
- }
- Err(e) => fail!("{}", e),
- }
- }
- fn count_lines(mut f: io::File) -> uint {
- let mut lines = 0u;
- // // ~ 1) slow
- // let mut r = io::BufferedReader::new(f);
- // loop {
- // match r.read_byte() {
- // Ok(c) => if c == b'\n' {lines += 1;},
- // Err(_) => break,
- // }
- // }
- // // ~ 2) slow as well
- // lines += io::BufferedReader::new(f).chars().filter(|c| match c {
- // &Ok(c) if c == '\n' => true,
- // _ => false,
- // }).count();
- // // ~ 3) faster by still slow
- // lines += io::BufferedReader::new(f).lines().count();
- // ~ 4) as fast as i could get it so far
- let mut buf = [0u8, ..64*1024];
- loop {
- match f.read(buf) {
- Ok(n) => {
- for i in range(0, n) {
- if buf[i] == b'\n' {
- lines += 1;
- }
- }
- }
- Err(_) => {
- break;
- }
- }
- }
- return lines;
- }
Advertisement
Add Comment
Please, Sign In to add comment