Mercurial > mercurial > hgweb_golang.cgi
comparison src/tac.go @ 0:de451fa0c9cd
golang repository.
author | pyon@macmini |
---|---|
date | Sat, 01 Oct 2016 11:16:31 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:de451fa0c9cd |
---|---|
1 package main | |
2 | |
3 import ( | |
4 "bufio" | |
5 "flag" | |
6 "fmt" | |
7 "os" | |
8 ) | |
9 | |
10 func main() { | |
11 flag.Parse() | |
12 | |
13 files := flag.Args() | |
14 | |
15 var lines []string | |
16 | |
17 // Input | |
18 if len( files ) == 0 { | |
19 lines = ReverseLines( os.Stdin, nil ) | |
20 } else { | |
21 for _, arg := range files { | |
22 f, err := os.Open( arg ) | |
23 if err != nil { | |
24 fmt.Fprintf( os.Stderr, "tac : %v\n", err ) | |
25 continue | |
26 } | |
27 l := ReverseLines( f, nil ) | |
28 f.Close() | |
29 lines = append( lines, l... ) | |
30 } | |
31 } | |
32 | |
33 // Output | |
34 for _, line := range lines { | |
35 fmt.Println( line ) | |
36 } | |
37 } | |
38 | |
39 func ReverseLines( f *os.File, l []string ) []string { | |
40 input := bufio.NewScanner( f ) | |
41 for input.Scan() { | |
42 l = append( l, input.Text() ) | |
43 } | |
44 for i, j := 0, len(l) - 1; i < j; i, j = i + 1, j - 1 { | |
45 l[i], l[j] = l[j], l[i] | |
46 } | |
47 return l | |
48 } | |
49 |