From d3ea130aa79c384a8b8f0485b061747f6ccea260 Mon Sep 17 00:00:00 2001 From: nate smith Date: Wed, 31 Jan 2024 21:05:10 -0800 Subject: [PATCH] small go program for stripping header/footer --- gutcontent.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 gutcontent.go diff --git a/gutcontent.go b/gutcontent.go new file mode 100644 index 0000000..2e252e1 --- /dev/null +++ b/gutcontent.go @@ -0,0 +1,54 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strings" +) + +/* +Given a project gutenberg plaintext book filename, open it and print just the content. +*/ + +func main() { + if len(os.Args) < 2 { + fmt.Fprintln(os.Stderr, "need a filename argument") + os.Exit(1) + } + filename := os.Args[1] + f, err := os.Open(filename) + if err != nil { + fmt.Fprintf(os.Stderr, "could not open '%s' for reading\n", filename) + os.Exit(2) + } + + s := bufio.NewScanner(f) + inHeader := true + inFooter := false + skippedAll := true + for s.Scan() { + text := strings.TrimSpace(s.Text()) + if inFooter { + break + } + if strings.HasPrefix(text, "*** START") { + inHeader = false + continue + } + if inHeader { + continue + } + if strings.HasPrefix(text, "*** END") { + inFooter = true + continue + } + fmt.Println(text) + if skippedAll { + skippedAll = false + } + } + if skippedAll { + fmt.Fprintln(os.Stderr, "warning: found no text to print") + } +}