mirror of
https://github.com/johnkerl/miller.git
synced 2026-08-02 04:22:59 +00:00
iterate
This commit is contained in:
parent
164b6299ff
commit
d293ab63bc
1 changed files with 74 additions and 8 deletions
82
go/mlr.go
82
go/mlr.go
|
|
@ -1,14 +1,80 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
//"fmt"
|
||||
"containers"
|
||||
// System:
|
||||
"bufio"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
// Miller:
|
||||
//"containers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
lrec := containers.LrecAlloc()
|
||||
lrec.Put("a", "foo")
|
||||
lrec.Put("x", "3")
|
||||
lrec.Put("y", "y")
|
||||
lrec.Print()
|
||||
// ----------------------------------------------------------------
|
||||
// xxx to do: stdout/stderr w/ ternary on exitrc
|
||||
func usage() {
|
||||
fmt.Fprintf(os.Stderr, "Usage: %s [options] {filenames ...}\n", os.Args[0])
|
||||
//fmt.Fprintf(os.Stderr, "If no file name is given, or if filename is \"-\", stdin is used.\n", os.Args[0])
|
||||
flag.PrintDefaults()
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
func main() {
|
||||
// pFoo := flag.Bool("f", false, "Foo")
|
||||
|
||||
flag.Usage = usage
|
||||
flag.Parse()
|
||||
args := flag.Args()
|
||||
|
||||
// foo := *pFoo
|
||||
|
||||
if len(args) == 0 {
|
||||
err := stream("-")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
} else {
|
||||
for _, arg := range args {
|
||||
err := stream(arg)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
func stream(sourceName string) error {
|
||||
inputStream := os.Stdin
|
||||
if sourceName != "-" {
|
||||
var err error
|
||||
if inputStream, err = os.Open(sourceName); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
reader := bufio.NewReader(inputStream)
|
||||
|
||||
eof := false
|
||||
|
||||
for !eof {
|
||||
line, err := reader.ReadString('\n')
|
||||
if err == io.EOF {
|
||||
err = nil
|
||||
eof = true
|
||||
} else if err != nil {
|
||||
return err
|
||||
} else {
|
||||
// This is how to do a chomp:
|
||||
line = strings.TrimRight(line, "\n")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue