Build a CLI Tool
Build a command-line tool with argument parsing, file I/O, and error handling.
The Tool: Line Counter
wyn
var file = Args.get("file")
var verbose = Args.has("verbose")
if file == "" {
println("Usage: linecount --file <path> [--verbose]")
} else {
if !File.exists(file) {
Log.error("file not found: " + file)
} else {
var content = File.read(file)
var lines = content.lines()
var count = lines.len()
if verbose {
for i in 0..count {
println("${i}: ${lines}"[i])
}
}
println("${count} lines")
}
}Build and Run
sh
wyn build linecount.wyn -o linecount
./linecount --file main.wyn --verboseAdd More Features
Word count
wyn
var words = 0
for line in lines {
words = words + line.words().len()
}
println("${words} words")JSON output
wyn
if Args.has("json") {
println("{\"lines\": " ${count} + ", \"words\": " ${words} + "}")
}Multiple files
wyn
var files = Args.positional()
var total = 0
for f in files {
var content = File.read(f)
var n = content.lines().len()
println(f + ": " ${n})
total = total + n
}
println("total: " ${total})