annotate src/entai_app/entai_app.go @ 2:451c99c1d9de

implement intaractive mode.
author pyon@macmini
date Thu, 13 Oct 2016 06:05:06 +0900
parents 3dafd57af3b1
children ca866a38a6a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
1 /****************************************************************************/
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
2 /* Entai_app.go ( ver 0.3 ) */
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
3 /* Last Change: 2016-10-13 Thu 06:04:09. */
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
4 /****************************************************************************/
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
5
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
6 package main
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
7
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
8 import (
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
9 "bufio"
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
10 "flag"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
11 "fmt"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
12 "os"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
13 "strconv"
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
14 "strings"
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
15 "time"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
16
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
17 "entai"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
18 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
19
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
20 var ver = "0.3"
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
21 var e entai.Entai
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
22
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
23 func main() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
24
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
25 e.Create()
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
26
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
27 // arguments
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
28 h := flag.Bool( "h", false, "help" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
29 r := flag.Bool( "r", false, "print rate" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
30 l := flag.Bool( "l", false, "1-liner mode" )
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
31 b := flag.Bool( "b", false, "batch mode" )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
32 v := flag.Bool( "v", false, "print verbose in 1-liner mode")
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
33 i := flag.Bool( "i", false, "print input value in 1-liner mode")
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
34 d := flag.Bool( "d", false, "intaracitve mode")
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
35 s := flag.Bool( "s", false, "server mode" )
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
36 p := flag.Int( "p", 8080, "listen port in server mode" )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
37
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
38 flag.Parse()
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
39
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
40 if flag.NFlag() == 0 {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
41 printTile()
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
42 flag.PrintDefaults()
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
43 fmt.Fprint( os.Stderr, "\n" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
44 os.Exit( 1 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
45 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
46
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
47 if *h {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
48 printTile()
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
49 fmt.Fprint( os.Stderr, "1-liner mode:\n" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
50 fmt.Fprint( os.Stderr, "> entai_app -l 20160731 20161224 30000\n\n" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
51 fmt.Fprint( os.Stderr, "> entai_app -i -l 20160731 20161224 30000\n\n" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
52 fmt.Fprint( os.Stderr, "> entai_app -i -v -l 20160731 20161224 30000\n\n" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
53 fmt.Fprint( os.Stderr, "server mode:\n" )
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
54 fmt.Fprint( os.Stderr, "> entai_app -s -p 3000\n" )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
55 os.Exit( 0 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
56 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
57
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
58 if *r {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
59 printTile()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
60 fmt.Fprint( os.Stderr, e.GetRate() )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
61 os.Exit( 0 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
62 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
63
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
64 if *s {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
65 *p = 8080
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
66 fmt.Fprint( os.Stderr, "server mode is not implemented.\n" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
67 os.Exit( 0 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
68 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
69
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
70 if *d {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
71 printTile()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
72 fmt.Print( e.GetRate() )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
73 fmt.Print( "-----------\n\n" )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
74
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
75 for {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
76 fmt.Print( "Input Tax > " )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
77 input := bufio.NewScanner( os.Stdin )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
78 input.Scan()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
79 t := input.Text()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
80
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
81 fmt.Print( "Input Due > " )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
82 input = bufio.NewScanner( os.Stdin )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
83 input.Scan()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
84 d := input.Text()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
85
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
86 fmt.Print( "Input Paid > " )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
87 input = bufio.NewScanner( os.Stdin )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
88 input.Scan()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
89 p := input.Text()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
90
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
91 result, _, err := processEntai( d, p, t )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
92 if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
93 fmt.Printf( "%v\n", err )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
94 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
95 fmt.Printf( " = %d\n\n", result )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
96
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
97 }
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
98 }
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
99
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
100 if *l {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
101 if *i {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
102 fmt.Printf( "%s,%s,%s,", flag.Arg(0), flag.Arg(1), flag.Arg(2) )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
103 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
104
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
105 result, detail, err := processEntai( flag.Arg(0), flag.Arg(1), flag.Arg(2) )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
106 if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
107 fmt.Fprintf( os.Stderr, "%s : %v\n", detail, err )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
108 os.Exit( 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
109 }
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
110 fmt.Print( result )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
111
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
112 if *v {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
113 fmt.Print( ",", detail )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
114 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
115 fmt.Print( "\n" )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
116
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
117 os.Exit( 0 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
118 }
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
119
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
120 if *b {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
121
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
122 files := flag.Args()
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
123
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
124 if len( files ) == 0 {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
125 fmt.Fprint( os.Stderr, "no input file.\n" )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
126 os.Exit( 1 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
127 } else {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
128
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
129 for _, file := range files {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
130 f, err := os.Open( file ); if err != nil {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
131 fmt.Fprintf( os.Stderr, "cannot open file.[%v]\n", err )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
132 os.Exit( 1 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
133 }
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
134
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
135 input := bufio.NewScanner( f )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
136 b := bufio.NewWriter( os.Stdout )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
137 for input.Scan() {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
138 s := strings.Split( input.Text(), "," )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
139 if strings.HasPrefix( input.Text(), "#" ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
140 if strings.Contains( input.Text(), "@@" ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
141 buf := strings.Replace( input.Text(), "#", "", 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
142 buf = strings.Replace( buf, "@@", "", 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
143 fmt.Fprintf( b, "%s\n", buf )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
144 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
145 continue
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
146 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
147 result, detail, err := processEntai( s[0], s[1], s[2] )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
148 if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
149 fmt.Fprintf( os.Stderr, "%s : %v\n", detail, err )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
150 os.Exit( 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
151 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
152 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
153 }
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
154 b.Flush()
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
155 f.Close()
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
156 }
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
157 os.Exit( 0 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
158 }
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
159 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
160 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
161
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
162 func processEntai( due, paid, tax string ) ( int, string, error ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
163 d, msg, err := validDate( due ); if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
164 return -1, msg, err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
165 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
166 p, msg, err := validDate( paid ); if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
167 return -1, msg, err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
168 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
169
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
170 t, msg, err := validInt( tax ); if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
171 return -1, msg, err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
172 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
173
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
174 e.Set( d, p, t )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
175 result, detail := e.Result()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
176
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
177 return result, detail, nil
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
178 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
179
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
180 func validDate( s string ) ( time.Time, string, error ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
181 layout := "20060102"
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
182 t, err := time.Parse( layout, s ); if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
183 return t, "bad date format.", err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
184 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
185 return t, "", nil
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
186 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
187
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
188 func validInt( s string ) ( int, string, error ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
189 i, err := strconv.Atoi( s )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
190 if err != nil || i < 0 {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
191 return -1, "bad money format.", err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
192 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
193 return i, "", nil
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
194 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
195
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
196 func printTile() {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
197 fmt.Fprint( os.Stderr, "\n==================================================\n" )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
198 fmt.Fprintf( os.Stderr, " Entai_app ver %s ( 2016.10.09 ) - since 2016\n", ver )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
199 fmt.Fprint( os.Stderr, "==================================================\n\n" )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
200 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
201