annotate src/entai_app/entai_app.go @ 18:45ca03520eea

ut: add grep.
author pyon@macmini
date Sat, 23 Jun 2018 09:38:15 +0900
parents f4ba4cfb09fd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
1 /****************************************************************************/
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
2 /* Entai_app.go */
7
f4ba4cfb09fd entai_app: abbreviration paid date.
pyon@macmini
parents: 5
diff changeset
3 /* Last Change: 2016-10-28 Fri 19:33:15. */
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
4 /* By T.Mutoh */
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
5 /****************************************************************************/
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
6
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
7 package main
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
8
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
9 import (
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
10 "bufio"
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
11 "encoding/csv"
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
12 "flag"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
13 "fmt"
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
14 "io"
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
15 "log"
5
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
16 "net/http"
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
17 "os"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
18 "strconv"
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
19 "strings"
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
20 "time"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
21
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
22 "entai"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
23 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
24
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
25 var ver = "0.4"
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
26 var e entai.Entai
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
27
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
28 func main() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
29
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
30 // arguments
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
31 h := flag.Bool( "h", false, "help" )
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
32 c := flag.String( "c", "", "config csv file" )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
33 r := flag.Bool( "r", false, "print rate" )
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
34 b := flag.Bool( "b", false, "batch mode" )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
35 l := flag.Bool( "l", false, "1-liner mode" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
36 v := flag.Bool( "v", false, "print verbose in 1-liner mode")
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
37 i := flag.Bool( "i", false, "print input value in 1-liner mode")
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
38 d := flag.Bool( "d", false, "intaracitve mode")
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
39 s := flag.Bool( "s", false, "server mode" )
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
40 p := flag.Int( "p", 8080, "listen port in server mode" )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
41
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
42 flag.Parse()
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
43
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
44 if flag.NFlag() == 0 {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
45 printTile()
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
46 flag.PrintDefaults()
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
47 fmt.Fprint( os.Stderr, "\n" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
48 os.Exit( 1 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
49 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
50
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
51 // Setting rates
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
52 if *c == "" {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
53 e.DefaultRates()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
54 } else {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
55 f, err := os.Open( *c ); if err != nil {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
56 fmt.Fprintf( os.Stderr, "cannot open config-file : %v\n", err )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
57 os.Exit( 1 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
58 }
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
59
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
60 r := csv.NewReader( f )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
61 r.Comment = '#'
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
62 r.TrimLeadingSpace = true
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
63 for {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
64 record, err := r.Read()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
65 if err == io.EOF {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
66 break
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
67 } else if err != nil {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
68 log.Fatal( err )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
69 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
70 e.AddRates( record[1], record[2], record[3] )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
71 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
72 f.Close()
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
73
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
74 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
75
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
76 switch {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
77
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
78 // Show examples
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
79 case *h :
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
80 printTile()
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
81 fmt.Fprint( os.Stderr, "1-liner mode:\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
82 fmt.Fprint( os.Stderr, "> entai_app -l 30000 20160731 20161224\n\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
83 fmt.Fprint( os.Stderr, "> entai_app -i -l 29000 20160731 20161224\n\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
84 fmt.Fprint( os.Stderr, "> entai_app -i -v -l 15000 20160731 20161224\n\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
85 fmt.Fprint( os.Stderr, "> entai_app -c conf/entai.conf -l 15000 20160731 20161224\n\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
86 fmt.Fprint( os.Stderr, "batch mode:\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
87 fmt.Fprint( os.Stderr, "> entai_app -b 1.csv 2.csv ...\n\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
88 fmt.Fprint( os.Stderr, "server mode:\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
89 fmt.Fprint( os.Stderr, "> entai_app -s -p 3000\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
90 os.Exit( 1 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
91
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
92 // Show rates
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
93 case *r :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
94 printTile()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
95 fmt.Fprint( os.Stderr, e.GetRates() )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
96 os.Exit( 0 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
97
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
98 // Server-mode ( not implement )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
99 case *s :
5
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
100 s := fmt.Sprintf( "localhost:%d", *p )
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
101 http.HandleFunc( "/", httpHandler )
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
102 log.Fatal( http.ListenAndServe( s, nil ) )
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
103
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
104 // Intaractive-mode
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
105 case *d :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
106 printTile()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
107 fmt.Print( e.GetRates() )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
108 fmt.Print( "-----------\n\n" )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
109
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
110 var t, d, p string
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
111 for {
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
112 t = getFromTerminal( "Input Tax ", t )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
113 d = getFromTerminal( "Input Due ", d )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
114 p = getFromTerminal( "Input Paid", p )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
115
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
116 result, detail, err := processEntai( t, d, p )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
117 if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
118 fmt.Printf( "%v\n", err )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
119 }
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
120 fmt.Printf( " = %d", result )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
121
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
122 fmt.Print( "\t\t\t... Continue [Enter] / Detail [1] / Quit [9] ? " )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
123 input := bufio.NewScanner( os.Stdin )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
124 input.Scan()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
125 switch input.Text() {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
126 case "1" :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
127 fmt.Printf( " = %s\n\n", detail )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
128 case "9" :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
129 os.Exit( 0 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
130 default :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
131 }
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
132 }
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
133
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
134 // 1-Liner-mode
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
135 case *l :
7
f4ba4cfb09fd entai_app: abbreviration paid date.
pyon@macmini
parents: 5
diff changeset
136 p := flag.Arg(2)
f4ba4cfb09fd entai_app: abbreviration paid date.
pyon@macmini
parents: 5
diff changeset
137 if p == "" {
f4ba4cfb09fd entai_app: abbreviration paid date.
pyon@macmini
parents: 5
diff changeset
138 layout := "20060102"
f4ba4cfb09fd entai_app: abbreviration paid date.
pyon@macmini
parents: 5
diff changeset
139 p = time.Now().Format( layout );
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
140 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
141
7
f4ba4cfb09fd entai_app: abbreviration paid date.
pyon@macmini
parents: 5
diff changeset
142 if *i {
f4ba4cfb09fd entai_app: abbreviration paid date.
pyon@macmini
parents: 5
diff changeset
143 fmt.Printf( "%s,%s,%s,", flag.Arg(0), flag.Arg(1), p )
f4ba4cfb09fd entai_app: abbreviration paid date.
pyon@macmini
parents: 5
diff changeset
144 }
f4ba4cfb09fd entai_app: abbreviration paid date.
pyon@macmini
parents: 5
diff changeset
145
f4ba4cfb09fd entai_app: abbreviration paid date.
pyon@macmini
parents: 5
diff changeset
146 result, detail, err := processEntai( flag.Arg(0), flag.Arg(1), p )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
147 if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
148 fmt.Fprintf( os.Stderr, "%s : %v\n", detail, err )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
149 os.Exit( 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
150 }
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
151 fmt.Print( result )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
152
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
153 if *v {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
154 fmt.Print( ",", detail )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
155 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
156 fmt.Print( "\n" )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
157
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
158 os.Exit( 0 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
159
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
160 // Batch-mode
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
161 case *b :
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
162 files := flag.Args()
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
163
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
164 if len( files ) == 0 {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
165 fmt.Fprint( os.Stderr, "no input file.\n" )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
166 os.Exit( 1 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
167 } else {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
168
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
169 for _, file := range files {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
170 f, err := os.Open( file ); if err != nil {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
171 fmt.Fprintf( os.Stderr, "cannot open file.[%v]\n", err )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
172 os.Exit( 1 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
173 }
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
174
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
175 input := bufio.NewScanner( f )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
176 b := bufio.NewWriter( os.Stdout )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
177 for input.Scan() {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
178 s := strings.Split( input.Text(), "," )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
179 if strings.HasPrefix( input.Text(), "#" ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
180 if strings.Contains( input.Text(), "@@" ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
181 buf := strings.Replace( input.Text(), "#", "", 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
182 buf = strings.Replace( buf, "@@", "", 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
183 fmt.Fprintf( b, "%s\n", buf )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
184 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
185 continue
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
186 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
187 result, detail, err := processEntai( s[0], s[1], s[2] )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
188 if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
189 fmt.Fprintf( os.Stderr, "%s : %v\n", detail, err )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
190 os.Exit( 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
191 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
192 fmt.Fprintf( b, "%s,%s,%s,%d,%s\n", s[0], s[1], s[2], result, detail )
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
193 }
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
194 b.Flush()
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
195 f.Close()
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
196 }
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
197 os.Exit( 0 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
198 }
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
199 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
200 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
201
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
202 // Subroutines
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
203 func processEntai( tax, due, paid string ) ( int, string, error ) {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
204 t, msg, err := validInt( tax ); if err != nil {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
205 return -1, msg, err
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
206 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
207
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
208 d, msg, err := validDate( due ); if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
209 return -1, msg, err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
210 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
211 p, msg, err := validDate( paid ); if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
212 return -1, msg, err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
213 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
214
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
215 e.Set( d, p, t )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
216 result, detail := e.Result()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
217
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
218 return result, detail, nil
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
219 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
220
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
221 func validDate( s string ) ( time.Time, string, error ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
222 layout := "20060102"
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
223 t, err := time.Parse( layout, s ); if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
224 return t, "bad date format.", err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
225 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
226 return t, "", nil
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
227 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
228
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
229 func validInt( s string ) ( int, string, error ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
230 i, err := strconv.Atoi( s )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
231 if err != nil || i < 0 {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
232 return -1, "bad money format.", err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
233 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
234 return i, "", nil
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
235 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
236
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
237 func getFromTerminal( prompt, last string ) ( string ) {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
238 fmt.Printf( "%s > ", prompt )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
239 input := bufio.NewScanner( os.Stdin )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
240 input.Scan()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
241 s := input.Text()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
242 if s == "." {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
243 s = last
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
244 fmt.Printf( "%s > %s\n", prompt, s )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
245 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
246 return s
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
247 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
248
5
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
249 func httpHandler( w http.ResponseWriter, r *http.Request ) {
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
250 fmt.Fprintf( w, "RemoteAddr: %q\n", r.RemoteAddr )
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
251 if err := r.ParseForm(); err != nil {
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
252 log.Print( err )
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
253 }
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
254 for k, v := range r.Form {
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
255 fmt.Fprintf( w, "%q: %q\n", k, v )
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
256 }
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
257 }
e4066309b04f refactoring.
pyon@macmini
parents: 3
diff changeset
258
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
259 func printTile() {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
260 fmt.Fprint( os.Stderr, "\n==================================================\n" )
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
261 fmt.Fprintf( os.Stderr, " Entai_app ver %s ( 2016.10.19 ) - since 2016\n", ver )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
262 fmt.Fprint( os.Stderr, "==================================================\n\n" )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
263 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
264