/examples/file-summary/nocter.nct
nocter.nct
#name: "file-summary"
#version: "0.1.0"
#executable: {
name: "file-summary",
}
use std/io.{open_path, print}
use std/io_buffer.BufReader
use std/num.usize_to_string
use std/path.Utf8Path
use std/process.arg
use std/vec.Vec
func main(): i32! {
let requested: &str = arg(1)? otherwise {
print("usage: file-summary PATH\n")?
return 2
}
let path = Utf8Path.new(requested)?
let file = open_path(&path)?
var reader = BufReader.new(move file)
var buffer: Vec<u8> = Vec [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
var lines: usize = 0
while true {
let received: usize = reader.read(buffer.view_mut())?
if received == 0 {
break
}
var offset: usize = 0
while offset < received {
if buffer.view()[offset] == 10 {
lines = lines + 1
}
offset = offset + 1
}
}
let result = usize_to_string(lines)
print(result.view())?
print("\n")?
return 0
}