Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| // Copyright © 2016 Alan A. A. Donovan & Brian W. Kernighan. | |
| // License: https://creativecommons.org/licenses/by-nc-sa/4.0/ | |
| // See page 72. | |
| // Basename1 reads file names from stdin and prints the base name of each one. | |
| package main | |
| import ( | |
| "bufio" | |
| "fmt" | |
| "os" | |
| ) | |
| func main() { | |
| input := bufio.NewScanner(os.Stdin) | |
| for input.Scan() { | |
| fmt.Println(basename(input.Text())) | |
| } | |
| // NOTE: ignoring potential errors from input.Err() | |
| } | |
| //!+ | |
| // basename removes directory components and a .suffix. | |
| // e.g., a => a, a.go => a, a/b/c.go => c, a/b.c.go => b.c | |
| func basename(s string) string { | |
| // Discard last '/' and everything before. | |
| for i := len(s) - 1; i >= 0; i-- { | |
| if s[i] == '/' { | |
| s = s[i+1:] | |
| break | |
| } | |
| } | |
| // Preserve everything before last '.'. | |
| for i := len(s) - 1; i >= 0; i-- { | |
| if s[i] == '.' { | |
| s = s[:i] | |
| break | |
| } | |
| } | |
| return s | |
| } | |
| //!- |